diff --git a/.dumi/components/SemanticPreview.tsx b/.dumi/components/SemanticPreview.tsx index 3c734d73d3..ecdfa5442e 100644 --- a/.dumi/components/SemanticPreview.tsx +++ b/.dumi/components/SemanticPreview.tsx @@ -111,12 +111,14 @@ const SemanticPreview: React.FC = (props) => { const targetElement = containerRef.current?.querySelector(`.${targetClassName}`); const containerRect = containerRef.current?.getBoundingClientRect(); const targetRect = targetElement?.getBoundingClientRect(); + setMarkPos([ (targetRect?.left || 0) - (containerRect?.left || 0), (targetRect?.top || 0) - (containerRect?.top || 0), targetRect?.width || 0, targetRect?.height || 0, ]); + timerRef.current = setTimeout(() => { setPositionMotion(true); }, 10); diff --git a/.dumi/pages/index/components/Theme/ColorPicker.tsx b/.dumi/pages/index/components/Theme/ColorPicker.tsx index 4db445a449..68262526b9 100644 --- a/.dumi/pages/index/components/Theme/ColorPicker.tsx +++ b/.dumi/pages/index/components/Theme/ColorPicker.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { ColorPicker, Flex, Input } from 'antd'; -import { createStyles } from 'antd-style'; import type { ColorPickerProps, GetProp } from 'antd'; +import { createStyles } from 'antd-style'; import { generateColor } from 'antd/es/color-picker/util'; import classNames from 'classnames'; @@ -61,7 +61,7 @@ const DebouncedColorPicker: React.FC {children} diff --git a/.dumi/pages/index/components/Theme/index.tsx b/.dumi/pages/index/components/Theme/index.tsx index 78ebcb860d..2a60ebada0 100644 --- a/.dumi/pages/index/components/Theme/index.tsx +++ b/.dumi/pages/index/components/Theme/index.tsx @@ -6,7 +6,7 @@ import { HomeOutlined, QuestionCircleOutlined, } from '@ant-design/icons'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import type { ColorPickerProps, GetProp, MenuProps, ThemeConfig } from 'antd'; import { Breadcrumb, @@ -324,7 +324,7 @@ const ThemesInfo: Record> = { const normalize = (value: number) => value / 255; function rgbToColorMatrix(color: string) { - const rgb = new TinyColor(color).toRgb(); + const rgb = new FastColor(color).toRgb(); const { r, g, b } = rgb; const invertValue = normalize(r) * 100; diff --git a/.dumi/theme/builtins/ColorChunk/index.tsx b/.dumi/theme/builtins/ColorChunk/index.tsx index 26d815145f..743ded015d 100644 --- a/.dumi/theme/builtins/ColorChunk/index.tsx +++ b/.dumi/theme/builtins/ColorChunk/index.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import type { ColorInput } from '@ctrl/tinycolor'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; +import type { ColorInput } from '@ant-design/fast-color'; import { createStyles } from 'antd-style'; const useStyle = createStyles(({ token, css }) => ({ @@ -22,7 +22,7 @@ const useStyle = createStyles(({ token, css }) => ({ })); interface ColorChunkProps { - value?: ColorInput; + value: ColorInput; } const ColorChunk: React.FC> = (props) => { @@ -30,7 +30,7 @@ const ColorChunk: React.FC> = (props) = const { value, children } = props; const dotColor = React.useMemo(() => { - const _color = new TinyColor(value).toHex8String(); + const _color = new FastColor(value).toHexString(); return _color.endsWith('ff') ? _color.slice(0, -2) : _color; }, [value]); diff --git a/.dumi/theme/builtins/ComponentTokenTable/index.tsx b/.dumi/theme/builtins/ComponentTokenTable/index.tsx index fb600abd3b..402a365ff0 100644 --- a/.dumi/theme/builtins/ComponentTokenTable/index.tsx +++ b/.dumi/theme/builtins/ComponentTokenTable/index.tsx @@ -157,7 +157,7 @@ const SubTokenTable: React.FC = (props) => { {title} {/* {code} */} diff --git a/.dumi/theme/builtins/TokenCompare/index.tsx b/.dumi/theme/builtins/TokenCompare/index.tsx index dc20185a61..2da926f294 100644 --- a/.dumi/theme/builtins/TokenCompare/index.tsx +++ b/.dumi/theme/builtins/TokenCompare/index.tsx @@ -1,6 +1,6 @@ // 用于 color.md 中的颜色对比 import React from 'react'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { Flex, theme } from 'antd'; import { createStyles } from 'antd-style'; import tokenMeta from 'antd/es/version/token-meta.json'; @@ -55,7 +55,7 @@ const useStyle = createStyles(({ token, css }) => { }); function color2Rgba(color: string) { - return `#${new TinyColor(color).toHex8().toUpperCase()}`; + return `#${new FastColor(color).toHexString().toUpperCase()}`; } interface ColorCircleProps { diff --git a/.dumi/theme/builtins/TokenTable/index.tsx b/.dumi/theme/builtins/TokenTable/index.tsx index afe7a86612..7611b51999 100644 --- a/.dumi/theme/builtins/TokenTable/index.tsx +++ b/.dumi/theme/builtins/TokenTable/index.tsx @@ -99,7 +99,7 @@ const TokenTable: FC = ({ type }) => { name: token, desc: lang === 'cn' ? meta.desc : meta.descEn, type: meta.type, - value: defaultToken[token], + value: defaultToken[token as keyof typeof defaultToken], })), [type, lang], ); diff --git a/.dumi/theme/common/styles/Markdown.tsx b/.dumi/theme/common/styles/Markdown.tsx index 81cb69c4c4..952074b558 100644 --- a/.dumi/theme/common/styles/Markdown.tsx +++ b/.dumi/theme/common/styles/Markdown.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { css, Global } from '@emotion/react'; import { useTheme } from 'antd-style'; @@ -410,7 +410,7 @@ const GlobalStyle: React.FC = () => { background: ${demoGridColor}; &:nth-child(2n + 1) { - background: ${new TinyColor(demoGridColor).setAlpha(0.75).toHex8String()}; + background: ${new FastColor(demoGridColor).setA(0.75).toHexString()}; } } @@ -426,12 +426,12 @@ const GlobalStyle: React.FC = () => { } ${antCls}-row .demo-col-1 { - background: ${new TinyColor(demoGridColor).setAlpha(0.75).toHexString()}; + background: ${new FastColor(demoGridColor).setA(0.75).toHexString()}; } ${antCls}-row .demo-col-2, .code-box-demo ${antCls}-row .demo-col-2 { - background: ${new TinyColor(demoGridColor).setAlpha(0.75).toHexString()}; + background: ${new FastColor(demoGridColor).setA(0.75).toHexString()}; } ${antCls}-row .demo-col-3, @@ -442,7 +442,7 @@ const GlobalStyle: React.FC = () => { ${antCls}-row .demo-col-4, .code-box-demo ${antCls}-row .demo-col-4 { - background: ${new TinyColor(demoGridColor).setAlpha(0.6).toHexString()}; + background: ${new FastColor(demoGridColor).setA(0.6).toHexString()}; } ${antCls}-row .demo-col-5, diff --git a/.dumi/theme/slots/Footer/index.tsx b/.dumi/theme/slots/Footer/index.tsx index 01d038bdb7..7419eef0e3 100644 --- a/.dumi/theme/slots/Footer/index.tsx +++ b/.dumi/theme/slots/Footer/index.tsx @@ -13,7 +13,7 @@ import { UsergroupAddOutlined, ZhihuOutlined, } from '@ant-design/icons'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { createStyles } from 'antd-style'; import getAlphaColor from 'antd/es/theme/util/getAlphaColor'; import { FormattedMessage, Link } from 'dumi'; @@ -37,7 +37,7 @@ const locales = { const useStyle = () => { const { isMobile } = useContext(SiteContext); return createStyles(({ token, css }) => { - const background = new TinyColor(getAlphaColor('#f0f3fa', '#fff')) + const background = new FastColor(getAlphaColor('#f0f3fa', '#fff')) .onBackground(token.colorBgContainer) .toHexString(); diff --git a/.dumi/theme/slots/Header/index.tsx b/.dumi/theme/slots/Header/index.tsx index ab493de079..3dc38090f8 100644 --- a/.dumi/theme/slots/Header/index.tsx +++ b/.dumi/theme/slots/Header/index.tsx @@ -357,7 +357,7 @@ const Header: React.FC = () => {
{isMobile && ( { count: 2, popover: { placement: 'bottomRight', - overlayClassName: 'wanpan-111', - overlayStyle: { background: 'red' }, + classNames: { root: 'wanpan-111' }, + styles: { root: { background: 'red' } }, content: 'Avatar.Group', open: true, }, diff --git a/components/avatar/group.tsx b/components/avatar/group.tsx index 34fc2ee5ed..71d6180669 100644 --- a/components/avatar/group.tsx +++ b/components/avatar/group.tsx @@ -121,7 +121,7 @@ const Group: React.FC = (props) => { const mergeProps = { content: childrenHidden, ...max?.popover, - overlayClassName: classNames(`${groupPrefixCls}-popover`, max?.popover?.overlayClassName), + classNames: { root: classNames(`${groupPrefixCls}-popover`, max?.popover?.classNames?.root) }, placement: mergePopoverPlacement, trigger: mergePopoverTrigger, }; diff --git a/components/button/LoadingIcon.tsx b/components/button/DefaultLoadingIcon.tsx similarity index 93% rename from components/button/LoadingIcon.tsx rename to components/button/DefaultLoadingIcon.tsx index 8d06a980ac..7af127427b 100644 --- a/components/button/LoadingIcon.tsx +++ b/components/button/DefaultLoadingIcon.tsx @@ -23,7 +23,7 @@ const InnerLoadingIcon = forwardRef((pro ); }); -export type LoadingIconProps = { +export type DefaultLoadingIconProps = { prefixCls: string; existIcon: boolean; loading?: boolean | object; @@ -44,7 +44,7 @@ const getRealWidth = (node: HTMLElement): React.CSSProperties => ({ transform: 'scale(1)', }); -const LoadingIcon: React.FC = (props) => { +const DefaultLoadingIcon: React.FC = (props) => { const { prefixCls, loading, existIcon, className, style, mount } = props; const visible = !!loading; @@ -84,4 +84,4 @@ const LoadingIcon: React.FC = (props) => { ); }; -export default LoadingIcon; +export default DefaultLoadingIcon; diff --git a/components/button/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/button/__tests__/__snapshots__/demo-extend.test.ts.snap index b83e422849..0fff3639e8 100644 --- a/components/button/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/button/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -492,6 +492,162 @@ exports[`renders components/button/demo/color-variant.tsx extend context correct +
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
`; @@ -743,6 +899,7 @@ Array [ @@ -762,6 +919,7 @@ Array [ > @@ -781,6 +939,7 @@ Array [ > @@ -1434,7 +1593,7 @@ Array [ > @@ -2226,6 +2386,7 @@ Array [ @@ -3155,6 +3316,37 @@ exports[`renders components/button/demo/loading.tsx extend context correctly 1`] +
+
`; @@ -3422,6 +3645,7 @@ Array [ @@ -3441,6 +3665,7 @@ Array [ > @@ -3460,6 +3685,7 @@ Array [ > diff --git a/components/button/__tests__/__snapshots__/demo.test.ts.snap b/components/button/__tests__/__snapshots__/demo.test.ts.snap index 501b25f706..3af1eaf513 100644 --- a/components/button/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/button/__tests__/__snapshots__/demo.test.ts.snap @@ -484,6 +484,162 @@ exports[`renders components/button/demo/color-variant.tsx correctly 1`] = ` +
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
`; @@ -727,6 +883,7 @@ Array [ @@ -746,6 +903,7 @@ Array [ > @@ -765,6 +923,7 @@ Array [ > @@ -1342,7 +1501,7 @@ Array [ > @@ -2050,6 +2210,7 @@ Array [ @@ -2783,6 +2944,37 @@ exports[`renders components/button/demo/loading.tsx correctly 1`] = ` +
+
`; @@ -2943,6 +3166,7 @@ Array [ @@ -2962,6 +3186,7 @@ Array [ > @@ -2981,6 +3206,7 @@ Array [ > diff --git a/components/button/__tests__/index.test.tsx b/components/button/__tests__/index.test.tsx index f5ae30c8c5..3b2f9fae4d 100644 --- a/components/button/__tests__/index.test.tsx +++ b/components/button/__tests__/index.test.tsx @@ -2,13 +2,14 @@ import React, { Suspense, useRef, useState } from 'react'; import { SearchOutlined } from '@ant-design/icons'; import { resetWarned } from 'rc-util/lib/warning'; -import Button from '..'; +import Button, { _ButtonVariantTypes } from '..'; import type { GetRef } from '../../_util/type'; import mountTest from '../../../tests/shared/mountTest'; import rtlTest from '../../../tests/shared/rtlTest'; import { act, fireEvent, render, waitFakeTimer } from '../../../tests/utils'; import ConfigProvider from '../../config-provider'; import theme from '../../theme'; +import { PresetColors } from '../../theme/interface'; import type { BaseButtonProps } from '../button'; describe('Button', () => { @@ -475,6 +476,20 @@ describe('Button', () => { }); }); + it('should render preset colors and variants correctly', () => { + PresetColors.forEach((color) => { + _ButtonVariantTypes.forEach((variant) => { + const { container } = render( + , + ); + expect(container.firstChild).toHaveClass(`ant-btn-color-${color}`); + expect(container.firstChild).toHaveClass(`ant-btn-variant-${variant}`); + }); + }); + }); + it('autoFocus should work', () => { const { container } = render(); diff --git a/components/button/button.tsx b/components/button/button.tsx index 808cc557be..4970f63f7d 100644 --- a/components/button/button.tsx +++ b/components/button/button.tsx @@ -20,7 +20,7 @@ import type { } from './buttonHelpers'; import { isTwoCNChar, isUnBorderedButtonVariant, spaceChildren } from './buttonHelpers'; import IconWrapper from './IconWrapper'; -import LoadingIcon from './LoadingIcon'; +import DefaultLoadingIcon from './DefaultLoadingIcon'; import useStyle from './style'; import Compact from './style/compact'; @@ -35,7 +35,7 @@ export interface BaseButtonProps { shape?: ButtonShape; size?: SizeType; disabled?: boolean; - loading?: boolean | { delay?: number }; + loading?: boolean | { delay?: number; icon?: React.ReactNode }; prefixCls?: string; className?: string; rootClassName?: string; @@ -310,8 +310,12 @@ const InternalCompoundedButton = React.forwardRef< {icon} + ) : typeof loading === 'object' && loading.icon ? ( + + {loading.icon} + ) : ( - { Link + + + + + + + + + + + + + + + + + + + + + + + + + ); diff --git a/components/button/demo/debug-color-variant.tsx b/components/button/demo/debug-color-variant.tsx index 0085a81d31..bb00ea02bb 100644 --- a/components/button/demo/debug-color-variant.tsx +++ b/components/button/demo/debug-color-variant.tsx @@ -54,7 +54,7 @@ const App: React.FC = () => { {/* link color */} - + diff --git a/components/button/demo/loading.md b/components/button/demo/loading.md index b78725001d..37024ec5c4 100644 --- a/components/button/demo/loading.md +++ b/components/button/demo/loading.md @@ -1,7 +1,7 @@ ## zh-CN -添加 `loading` 属性即可让按钮处于加载状态,最后三个按钮演示点击后进入加载状态。 +添加 `loading` 属性即可让按钮处于加载状态,`loading.icon` 可以自定义加载图标,最后三个按钮演示点击后进入加载状态。 ## en-US -A loading indicator can be added to a button by setting the `loading` property on the `Button`. +A loading indicator can be added to a button by setting the `loading` property on the `Button`. The `loading.icon` can be used to customize the loading icon. diff --git a/components/button/demo/loading.tsx b/components/button/demo/loading.tsx index 58f1e26034..07f83900eb 100644 --- a/components/button/demo/loading.tsx +++ b/components/button/demo/loading.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { PoweroffOutlined } from '@ant-design/icons'; +import { PoweroffOutlined, SyncOutlined } from '@ant-design/icons'; import { Button, Flex } from 'antd'; const App: React.FC = () => { @@ -31,6 +31,9 @@ const App: React.FC = () => { Loading ); diff --git a/components/button/index.en-US.md b/components/button/index.en-US.md index 8952aadd35..3c7964fda6 100644 --- a/components/button/index.en-US.md +++ b/components/button/index.en-US.md @@ -63,7 +63,7 @@ Different button styles generated by setting Button properties. The recommended | autoInsertSpace | We add a space between two Chinese characters by default, which removed by setting `autoInsertSpace` to `false`. | boolean | `true` | 5.17.0 | | block | Option to fit button width to its parent width | boolean | false | | | classNames | Semantic DOM class | [Record](#semantic-dom) | - | 5.4.0 | -| color | Set button color | `default` \| `primary` \| `danger` | - | 5.21.0 | +| color | Set button color | `default` \| `primary` \| `danger` \| [PresetColors](#presetcolors) | - | `default`, `primary` and `danger`: 5.21.0, `PresetColors`: 5.23.0 | | danger | Syntactic sugar. Set the danger status of button. will follow `color` if provided | boolean | false | | | disabled | Disabled state of button | boolean | false | | | ghost | Make background transparent and invert text and border colors | boolean | false | | @@ -71,7 +71,7 @@ Different button styles generated by setting Button properties. The recommended | htmlType | Set the original html `type` of `button`, see: [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#type) | `submit` \| `reset` \| `button` | `button` | | | icon | Set the icon component of button | ReactNode | - | | | iconPosition | Set the icon position of button | `start` \| `end` | `start` | 5.17.0 | -| loading | Set the loading status of button | boolean \| { delay: number } | false | | +| loading | Set the loading status of button | boolean \| { delay: number, icon: ReactNode } | false | icon: 5.23.0 | | shape | Can be used to set button shape | `default` \| `circle` \| `round` | `default` | | | size | Set the size of button | `large` \| `middle` \| `small` | `middle` | | | styles | Semantic DOM style | [Record](#semantic-dom) | - | 5.4.0 | @@ -82,6 +82,10 @@ Different button styles generated by setting Button properties. The recommended It accepts all props which native buttons support. +### PresetColors + +> type PresetColors = 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold'; + ## Semantic DOM diff --git a/components/button/index.zh-CN.md b/components/button/index.zh-CN.md index 5424d1fb97..e281fc491d 100644 --- a/components/button/index.zh-CN.md +++ b/components/button/index.zh-CN.md @@ -69,7 +69,7 @@ group: | autoInsertSpace | 我们默认提供两个汉字之间的空格,可以设置 `autoInsertSpace` 为 `false` 关闭 | boolean | `true` | 5.17.0 | | block | 将按钮宽度调整为其父宽度的选项 | boolean | false | | | classNames | 语义化结构 class | [Record](#semantic-dom) | - | 5.4.0 | -| color | 设置按钮的颜色 | `default` \| `primary` \| `danger` | - | 5.21.0 | +| color | 设置按钮的颜色 | `default` \| `primary` \| `danger` \| [PresetColors](#presetcolors) | - | `default`、`primary` 和 `danger`: 5.21.0, `PresetColors`: 5.23.0 | | danger | 语法糖,设置危险按钮。当设置 `color` 时会以后者为准 | boolean | false | | | disabled | 设置按钮失效状态 | boolean | false | | | ghost | 幽灵属性,使按钮背景透明 | boolean | false | | @@ -77,7 +77,7 @@ group: | htmlType | 设置 `button` 原生的 `type` 值,可选值请参考 [HTML 标准](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/button#type) | `submit` \| `reset` \| `button` | `button` | | | icon | 设置按钮的图标组件 | ReactNode | - | | | iconPosition | 设置按钮图标组件的位置 | `start` \| `end` | `start` | 5.17.0 | -| loading | 设置按钮载入状态 | boolean \| { delay: number } | false | | +| loading | 设置按钮载入状态 | boolean \| { delay: number, icon: ReactNode } | false | icon: 5.23.0 | | shape | 设置按钮形状 | `default` \| `circle` \| `round` | `default` | | | size | 设置按钮大小 | `large` \| `middle` \| `small` | `middle` | | | styles | 语义化结构 style | [Record](#semantic-dom) | - | 5.4.0 | @@ -88,6 +88,10 @@ group: 支持原生 button 的其他所有属性。 +### PresetColors + +> type PresetColors = 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold'; + ## Semantic DOM diff --git a/components/button/style/index.ts b/components/button/style/index.ts index 267047ba36..f495b99212 100644 --- a/components/button/style/index.ts +++ b/components/button/style/index.ts @@ -2,7 +2,8 @@ import type { CSSInterpolation, CSSObject } from '@ant-design/cssinjs'; import { unit } from '@ant-design/cssinjs'; import { genFocusStyle, resetIcon } from '../../style'; -import type { GenerateStyle } from '../../theme/internal'; +import { PresetColors } from '../../theme/interface'; +import type { GenerateStyle, PresetColorKey } from '../../theme/internal'; import { genStyleHooks, mergeToken } from '../../theme/internal'; import type { ButtonVariantType } from '../buttonHelpers'; import genGroupStyle from './group'; @@ -298,6 +299,95 @@ const genTextLinkButtonStyle = ( }); // =============================== Color ============================== +const genPresetColorStyle: GenerateStyle = (token) => { + const { componentCls } = token; + + return PresetColors.reduce((prev: CSSObject, colorKey: PresetColorKey) => { + const darkColor = token[`${colorKey}6`]; + const lightColor = token[`${colorKey}1`]; + const hoverColor = token[`${colorKey}5`]; + const lightHoverColor = token[`${colorKey}2`]; + const lightBorderColor = token[`${colorKey}3`]; + const activeColor = token[`${colorKey}7`]; + const boxShadow = `0 ${token.controlOutlineWidth} 0 ${token[`${colorKey}1`]}`; + + return { + ...prev, + [`&${componentCls}-color-${colorKey}`]: { + color: darkColor, + boxShadow, + + ...genSolidButtonStyle( + token, + token.colorTextLightSolid, + darkColor, + { + background: hoverColor, + }, + { + background: activeColor, + }, + ), + + ...genOutlinedDashedButtonStyle( + token, + darkColor, + token.colorBgContainer, + { + color: hoverColor, + borderColor: hoverColor, + background: token.colorBgContainer, + }, + { + color: activeColor, + borderColor: activeColor, + background: token.colorBgContainer, + }, + ), + + ...genDashedButtonStyle(token), + + ...genFilledButtonStyle( + token, + lightColor, + { + background: lightHoverColor, + }, + { + background: lightBorderColor, + }, + ), + + ...genTextLinkButtonStyle( + token, + darkColor, + 'link', + { + color: hoverColor, + }, + { + color: activeColor, + }, + ), + + ...genTextLinkButtonStyle( + token, + darkColor, + 'text', + { + color: hoverColor, + background: lightColor, + }, + { + color: activeColor, + background: lightBorderColor, + }, + ), + }, + }; + }, {}); +}; + const genDefaultButtonStyle: GenerateStyle = (token) => ({ color: token.defaultColor, @@ -513,6 +603,8 @@ const genColorButtonStyle: GenerateStyle = (token) => { [`${componentCls}-color-default`]: genDefaultButtonStyle(token), [`${componentCls}-color-primary`]: genPrimaryButtonStyle(token), [`${componentCls}-color-dangerous`]: genDangerousStyle(token), + + ...genPresetColorStyle(token), }; }; diff --git a/components/calendar/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/calendar/__tests__/__snapshots__/demo-extend.test.ts.snap index 1f0898e341..f4f104613c 100644 --- a/components/calendar/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/calendar/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -783,6 +783,7 @@ exports[`renders components/calendar/demo/basic.tsx extend context correctly 1`] @@ -802,6 +803,7 @@ exports[`renders components/calendar/demo/basic.tsx extend context correctly 1`] > @@ -2376,6 +2378,7 @@ exports[`renders components/calendar/demo/card.tsx extend context correctly 1`] @@ -2395,6 +2398,7 @@ exports[`renders components/calendar/demo/card.tsx extend context correctly 1`] > @@ -3968,6 +3972,7 @@ Array [ @@ -3987,6 +3992,7 @@ Array [ > @@ -5554,6 +5560,7 @@ Array [ @@ -5573,6 +5580,7 @@ Array [ > @@ -6397,6 +6405,7 @@ exports[`renders components/calendar/demo/customize-header.tsx extend context co @@ -6416,6 +6425,7 @@ exports[`renders components/calendar/demo/customize-header.tsx extend context co > @@ -8788,6 +8798,7 @@ exports[`renders components/calendar/demo/notice-calendar.tsx extend context cor @@ -8807,6 +8818,7 @@ exports[`renders components/calendar/demo/notice-calendar.tsx extend context cor > @@ -10791,6 +10803,7 @@ Array [ @@ -10810,6 +10823,7 @@ Array [ > @@ -11598,3 +11612,3299 @@ Array [ `; exports[`renders components/calendar/demo/select.tsx extend context correctly 2`] = `[]`; + +exports[`renders components/calendar/demo/week.tsx extend context correctly 1`] = ` +Array [ +
+
+
+
+ + + + + + 2016 + + +
+
+
+
+
+ 2006 +
+
+ 2007 +
+
+
+
+
+
+
+
+ 2006 +
+
+
+
+ 2007 +
+
+
+
+ 2008 +
+
+
+
+ 2009 +
+
+
+
+ 2010 +
+
+
+
+ 2011 +
+
+
+
+ 2012 +
+
+
+
+ 2013 +
+
+
+
+ 2014 +
+
+
+
+ 2015 +
+
+
+
+ 2016 +
+
+
+
+ 2017 +
+
+
+
+ 2018 +
+
+
+
+ 2019 +
+
+
+
+ 2020 +
+
+
+
+ 2021 +
+
+
+
+ 2022 +
+
+
+
+ 2023 +
+
+
+
+ 2024 +
+
+
+
+ 2025 +
+
+
+
+
+
+
+
+ +
+
+
+ + + + + + Nov + + +
+
+
+
+
+ 0 +
+
+ 1 +
+
+
+
+
+
+
+
+ Jan +
+
+
+
+ Feb +
+
+
+
+ Mar +
+
+
+
+ Apr +
+
+
+
+ May +
+
+
+
+ Jun +
+
+
+
+ Jul +
+
+
+
+ Aug +
+
+
+
+ Sep +
+
+
+
+ Oct +
+
+
+
+ Nov +
+
+
+
+ Dec +
+
+
+
+
+
+
+
+ +
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Su + + Mo + + Tu + + We + + Th + + Fr + + Sa +
+
+ 45 +
+
+
+
+ 30 +
+
+
+
+
+
+ 31 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+ 46 +
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+ 11 +
+
+
+
+
+
+ 12 +
+
+
+
+
+ 47 +
+
+
+
+ 13 +
+
+
+
+
+
+ 14 +
+
+
+
+
+
+ 15 +
+
+
+
+
+
+ 16 +
+
+
+
+
+
+ 17 +
+
+
+
+
+
+ 18 +
+
+
+
+
+
+ 19 +
+
+
+
+
+ 48 +
+
+
+
+ 20 +
+
+
+
+
+
+ 21 +
+
+
+
+
+
+ 22 +
+
+
+
+
+
+ 23 +
+
+
+
+
+
+ 24 +
+
+
+
+
+
+ 25 +
+
+
+
+
+
+ 26 +
+
+
+
+
+ 49 +
+
+
+
+ 27 +
+
+
+
+
+
+ 28 +
+
+
+
+
+
+ 29 +
+
+
+
+
+
+ 30 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+ 50 +
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+
+
, +
, +
+
+
+
+ + + + + + 2016 + + +
+
+
+
+
+ 2006 +
+
+ 2007 +
+
+
+
+
+
+
+
+ 2006 +
+
+
+
+ 2007 +
+
+
+
+ 2008 +
+
+
+
+ 2009 +
+
+
+
+ 2010 +
+
+
+
+ 2011 +
+
+
+
+ 2012 +
+
+
+
+ 2013 +
+
+
+
+ 2014 +
+
+
+
+ 2015 +
+
+
+
+ 2016 +
+
+
+
+ 2017 +
+
+
+
+ 2018 +
+
+
+
+ 2019 +
+
+
+
+ 2020 +
+
+
+
+ 2021 +
+
+
+
+ 2022 +
+
+
+
+ 2023 +
+
+
+
+ 2024 +
+
+
+
+ 2025 +
+
+
+
+
+
+
+
+ +
+
+
+ + + + + + Nov + + +
+
+
+
+
+ 0 +
+
+ 1 +
+
+
+
+
+
+
+
+ Jan +
+
+
+
+ Feb +
+
+
+
+ Mar +
+
+
+
+ Apr +
+
+
+
+ May +
+
+
+
+ Jun +
+
+
+
+ Jul +
+
+
+
+ Aug +
+
+
+
+ Sep +
+
+
+
+ Oct +
+
+
+
+ Nov +
+
+
+
+ Dec +
+
+
+
+
+
+
+
+ +
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Su + + Mo + + Tu + + We + + Th + + Fr + + Sa +
+
+ 45 +
+
+
+
+ 30 +
+
+
+
+
+
+ 31 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+ 46 +
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+ 11 +
+
+
+
+
+
+ 12 +
+
+
+
+
+ 47 +
+
+
+
+ 13 +
+
+
+
+
+
+ 14 +
+
+
+
+
+
+ 15 +
+
+
+
+
+
+ 16 +
+
+
+
+
+
+ 17 +
+
+
+
+
+
+ 18 +
+
+
+
+
+
+ 19 +
+
+
+
+
+ 48 +
+
+
+
+ 20 +
+
+
+
+
+
+ 21 +
+
+
+
+
+
+ 22 +
+
+
+
+
+
+ 23 +
+
+
+
+
+
+ 24 +
+
+
+
+
+
+ 25 +
+
+
+
+
+
+ 26 +
+
+
+
+
+ 49 +
+
+
+
+ 27 +
+
+
+
+
+
+ 28 +
+
+
+
+
+
+ 29 +
+
+
+
+
+
+ 30 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+ 50 +
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+
+
, +] +`; + +exports[`renders components/calendar/demo/week.tsx extend context correctly 2`] = `[]`; diff --git a/components/calendar/__tests__/__snapshots__/demo.test.ts.snap b/components/calendar/__tests__/__snapshots__/demo.test.ts.snap index afcaa40c6d..7b033caebb 100644 --- a/components/calendar/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/calendar/__tests__/__snapshots__/demo.test.ts.snap @@ -145,6 +145,7 @@ exports[`renders components/calendar/demo/basic.tsx correctly 1`] = ` @@ -164,6 +165,7 @@ exports[`renders components/calendar/demo/basic.tsx correctly 1`] = ` > @@ -1098,6 +1100,7 @@ exports[`renders components/calendar/demo/card.tsx correctly 1`] = ` @@ -1117,6 +1120,7 @@ exports[`renders components/calendar/demo/card.tsx correctly 1`] = ` > @@ -2050,6 +2054,7 @@ Array [ @@ -2069,6 +2074,7 @@ Array [ > @@ -2998,6 +3004,7 @@ Array [ @@ -3017,6 +3024,7 @@ Array [ > @@ -3839,6 +3847,7 @@ exports[`renders components/calendar/demo/customize-header.tsx correctly 1`] = ` @@ -3858,6 +3867,7 @@ exports[`renders components/calendar/demo/customize-header.tsx correctly 1`] = ` > @@ -4928,6 +4938,7 @@ exports[`renders components/calendar/demo/notice-calendar.tsx correctly 1`] = ` @@ -4947,6 +4958,7 @@ exports[`renders components/calendar/demo/notice-calendar.tsx correctly 1`] = ` > @@ -6291,6 +6303,7 @@ Array [ @@ -6310,6 +6323,7 @@ Array [ > @@ -7096,3 +7110,2021 @@ Array [ , ] `; + +exports[`renders components/calendar/demo/week.tsx correctly 1`] = ` +Array [ +
+
+
+
+ + + + + + 2016 + + +
+ +
+
+
+ + + + + + Nov + + +
+ +
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Su + + Mo + + Tu + + We + + Th + + Fr + + Sa +
+
+ 45 +
+
+
+
+ 30 +
+
+
+
+
+
+ 31 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+ 46 +
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+ 11 +
+
+
+
+
+
+ 12 +
+
+
+
+
+ 47 +
+
+
+
+ 13 +
+
+
+
+
+
+ 14 +
+
+
+
+
+
+ 15 +
+
+
+
+
+
+ 16 +
+
+
+
+
+
+ 17 +
+
+
+
+
+
+ 18 +
+
+
+
+
+
+ 19 +
+
+
+
+
+ 48 +
+
+
+
+ 20 +
+
+
+
+
+
+ 21 +
+
+
+
+
+
+ 22 +
+
+
+
+
+
+ 23 +
+
+
+
+
+
+ 24 +
+
+
+
+
+
+ 25 +
+
+
+
+
+
+ 26 +
+
+
+
+
+ 49 +
+
+
+
+ 27 +
+
+
+
+
+
+ 28 +
+
+
+
+
+
+ 29 +
+
+
+
+
+
+ 30 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+ 50 +
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+
+
, +
, +
+
+
+
+ + + + + + 2016 + + +
+ +
+
+
+ + + + + + Nov + + +
+ +
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Su + + Mo + + Tu + + We + + Th + + Fr + + Sa +
+
+ 45 +
+
+
+
+ 30 +
+
+
+
+
+
+ 31 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+ 46 +
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+ 11 +
+
+
+
+
+
+ 12 +
+
+
+
+
+ 47 +
+
+
+
+ 13 +
+
+
+
+
+
+ 14 +
+
+
+
+
+
+ 15 +
+
+
+
+
+
+ 16 +
+
+
+
+
+
+ 17 +
+
+
+
+
+
+ 18 +
+
+
+
+
+
+ 19 +
+
+
+
+
+ 48 +
+
+
+
+ 20 +
+
+
+
+
+
+ 21 +
+
+
+
+
+
+ 22 +
+
+
+
+
+
+ 23 +
+
+
+
+
+
+ 24 +
+
+
+
+
+
+ 25 +
+
+
+
+
+
+ 26 +
+
+
+
+
+ 49 +
+
+
+
+ 27 +
+
+
+
+
+
+ 28 +
+
+
+
+
+
+ 29 +
+
+
+
+
+
+ 30 +
+
+
+
+
+
+ 01 +
+
+
+
+
+
+ 02 +
+
+
+
+
+
+ 03 +
+
+
+
+
+ 50 +
+
+
+
+ 04 +
+
+
+
+
+
+ 05 +
+
+
+
+
+
+ 06 +
+
+
+
+
+
+ 07 +
+
+
+
+
+
+ 08 +
+
+
+
+
+
+ 09 +
+
+
+
+
+
+ 10 +
+
+
+
+
+
+
+
, +] +`; diff --git a/components/calendar/__tests__/__snapshots__/index.test.tsx.snap b/components/calendar/__tests__/__snapshots__/index.test.tsx.snap index a348a96a68..b1be928a0a 100644 --- a/components/calendar/__tests__/__snapshots__/index.test.tsx.snap +++ b/components/calendar/__tests__/__snapshots__/index.test.tsx.snap @@ -147,6 +147,7 @@ exports[`Calendar Calendar MonthSelect should display correct label 1`] = ` @@ -166,6 +167,7 @@ exports[`Calendar Calendar MonthSelect should display correct label 1`] = ` > @@ -1099,6 +1101,7 @@ exports[`Calendar Calendar should support locale 1`] = ` @@ -1118,6 +1121,7 @@ exports[`Calendar Calendar should support locale 1`] = ` > @@ -2051,6 +2055,7 @@ exports[`Calendar rtl render component should be rendered correctly in RTL direc @@ -2070,6 +2075,7 @@ exports[`Calendar rtl render component should be rendered correctly in RTL direc > @@ -3003,6 +3009,7 @@ exports[`Calendar support Calendar.generateCalendar 1`] = ` @@ -3022,6 +3029,7 @@ exports[`Calendar support Calendar.generateCalendar 1`] = ` > diff --git a/components/calendar/demo/week.md b/components/calendar/demo/week.md new file mode 100644 index 0000000000..cba80646e7 --- /dev/null +++ b/components/calendar/demo/week.md @@ -0,0 +1,7 @@ +## zh-CN + +通过将 `showWeek` 属性设置为 `true`,在全屏日历中显示周数。 + +## en-US + +Show week number in fullscreen calendar by setting `showWeek` prop to `true`. diff --git a/components/calendar/demo/week.tsx b/components/calendar/demo/week.tsx new file mode 100644 index 0000000000..ccd28a21f9 --- /dev/null +++ b/components/calendar/demo/week.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { Calendar } from 'antd'; + +const App: React.FC = () => ( + <> + +
+ + +); + +export default App; diff --git a/components/calendar/generateCalendar.tsx b/components/calendar/generateCalendar.tsx index cb47428d20..96ed4afa33 100644 --- a/components/calendar/generateCalendar.tsx +++ b/components/calendar/generateCalendar.tsx @@ -49,6 +49,7 @@ export interface CalendarProps { defaultValue?: DateType; mode?: CalendarMode; fullscreen?: boolean; + showWeek?: boolean; onChange?: (date: DateType) => void; onPanelChange?: (date: DateType, mode: CalendarMode) => void; onSelect?: (date: DateType, selectInfo: SelectInfo) => void; @@ -89,6 +90,7 @@ const generateCalendar = (generateConfig: GenerateCo mode, validRange, fullscreen = true, + showWeek, onChange, onPanelChange, onSelect, @@ -299,6 +301,7 @@ const generateCalendar = (generateConfig: GenerateCo picker={panelMode} disabledDate={mergedDisabledDate} hideHeader + showWeek={showWeek} /> , ); diff --git a/components/calendar/index.en-US.md b/components/calendar/index.en-US.md index ddf4655bac..0c1e9ab1f5 100644 --- a/components/calendar/index.en-US.md +++ b/components/calendar/index.en-US.md @@ -19,6 +19,7 @@ When data is in the form of dates, such as schedules, timetables, prices calenda Card Selectable Calendar Lunar Calendar +Show Week Customize Header Component Token @@ -45,7 +46,8 @@ Common props ref:[Common props](/docs/react/common-props) | defaultValue | The date selected by default | [dayjs](https://day.js.org/) | - | | | disabledDate | Function that specifies the dates that cannot be selected, `currentDate` is same dayjs object as `value` prop which you shouldn't mutate it](https://github.com/ant-design/ant-design/issues/30987) | (currentDate: Dayjs) => boolean | - | | | fullscreen | Whether to display in full-screen | boolean | true | | -| headerRender | Render custom header in panel | function(object:{value: Dayjs, type: string, onChange: f(), onTypeChange: f()}) | - | | +| showWeek | Whether to display week number | boolean | false | 5.23.0 | +| headerRender | Render custom header in panel | function(object:{value: Dayjs, type: 'year' \| 'month', onChange: f(), onTypeChange: f()}) | - | | | locale | The calendar's locale | object | [(default)](https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json) | | | mode | The display mode of the calendar | `month` \| `year` | `month` | | | validRange | To set valid range | \[[dayjs](https://day.js.org/), [dayjs](https://day.js.org/)] | - | | diff --git a/components/calendar/index.tsx b/components/calendar/index.tsx index d89d8cec86..d340679b3e 100644 --- a/components/calendar/index.tsx +++ b/components/calendar/index.tsx @@ -1,7 +1,7 @@ import type { Dayjs } from 'dayjs'; import dayjsGenerateConfig from 'rc-picker/lib/generate/dayjs'; -import type { CalendarProps } from './generateCalendar'; +import type { CalendarMode, CalendarProps } from './generateCalendar'; import generateCalendar from './generateCalendar'; const Calendar = generateCalendar(dayjsGenerateConfig); @@ -12,5 +12,5 @@ export type CalendarType = typeof Calendar & { (Calendar as CalendarType).generateCalendar = generateCalendar; -export type { CalendarProps }; +export type { CalendarMode, CalendarProps }; export default Calendar as CalendarType; diff --git a/components/calendar/index.zh-CN.md b/components/calendar/index.zh-CN.md index 3e76ce755a..707911d643 100644 --- a/components/calendar/index.zh-CN.md +++ b/components/calendar/index.zh-CN.md @@ -20,6 +20,7 @@ coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*-p-wQLik200AAA 卡片模式 选择功能 农历日历 +周数 自定义头部 组件 Token @@ -46,7 +47,8 @@ coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*-p-wQLik200AAA | defaultValue | 默认展示的日期 | [dayjs](https://day.js.org/) | - | | | disabledDate | 不可选择的日期,参数为当前 `value`,注意使用时[不要直接修改](https://github.com/ant-design/ant-design/issues/30987) | (currentDate: Dayjs) => boolean | - | | | fullscreen | 是否全屏显示 | boolean | true | | -| headerRender | 自定义头部内容 | function(object:{value: Dayjs, type: string, onChange: f(), onTypeChange: f()}) | - | | +| showWeek | 是否显示周数列 | boolean | false | 5.23.0 | +| headerRender | 自定义头部内容 | function(object:{value: Dayjs, type: 'year' \| 'month', onChange: f(), onTypeChange: f()}) | - | | | locale | 国际化配置 | object | [(默认配置)](https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json) | | | mode | 初始模式 | `month` \| `year` | `month` | | | validRange | 设置可以显示的日期 | \[[dayjs](https://day.js.org/), [dayjs](https://day.js.org/)] | - | | diff --git a/components/calendar/style/index.ts b/components/calendar/style/index.ts index fdeec49379..180da3d1e6 100644 --- a/components/calendar/style/index.ts +++ b/components/calendar/style/index.ts @@ -149,6 +149,18 @@ export const genCalendarStyles = (token: CalendarToken): CSSObject => { }, }, }, + [`${componentCls}-cell-week ${componentCls}-cell-inner`]: { + display: 'block', + borderRadius: 0, + borderTop: `${unit(token.lineWidthBold)} ${token.lineType} ${token.colorSplit}`, + width: '100%', + height: token + .calc(token.dateValueHeight) + .add(token.dateContentHeight) + .add(token.calc(token.paddingXS).div(2)) + .add(token.lineWidthBold) + .equal(), + }, [`${componentCls}-cell`]: { '&::before': { display: 'none', diff --git a/components/card/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/card/__tests__/__snapshots__/demo-extend.test.ts.snap index b8a7b4b5a6..d123508745 100644 --- a/components/card/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/card/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -160,6 +160,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-large ant-card-head-tabs" >
@@ -195,7 +196,7 @@ Array [ class="ant-tabs-tab-btn" id="rc-tabs-test-tab-tab2" role="tab" - tabindex="0" + tabindex="-1" > tab2
@@ -1127,6 +1128,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-large ant-card-head-tabs" >
@@ -1162,7 +1164,7 @@ Array [ class="ant-tabs-tab-btn" id="rc-tabs-test-tab-tab2" role="tab" - tabindex="0" + tabindex="-1" > tab2
@@ -1267,6 +1269,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-middle ant-card-head-tabs" >
@@ -1287,7 +1290,7 @@ Array [ class="ant-tabs-tab-btn" id="rc-tabs-test-tab-article" role="tab" - tabindex="0" + tabindex="-1" > article
@@ -1317,7 +1320,7 @@ Array [ class="ant-tabs-tab-btn" id="rc-tabs-test-tab-project" role="tab" - tabindex="0" + tabindex="-1" > project diff --git a/components/card/__tests__/__snapshots__/demo.test.ts.snap b/components/card/__tests__/__snapshots__/demo.test.ts.snap index ac2919c40e..fe9f5f0186 100644 --- a/components/card/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/card/__tests__/__snapshots__/demo.test.ts.snap @@ -156,6 +156,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-large ant-card-head-tabs" >
@@ -187,7 +188,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > tab2
@@ -1084,6 +1085,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-large ant-card-head-tabs" >
@@ -1115,7 +1117,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > tab2
@@ -1201,6 +1203,7 @@ Array [ class="ant-tabs ant-tabs-top ant-tabs-middle ant-card-head-tabs" >
@@ -1219,7 +1222,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > article
@@ -1245,7 +1248,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > project diff --git a/components/card/__tests__/__snapshots__/index.test.tsx.snap b/components/card/__tests__/__snapshots__/index.test.tsx.snap index 838b3c0b47..f074d43f4e 100644 --- a/components/card/__tests__/__snapshots__/index.test.tsx.snap +++ b/components/card/__tests__/__snapshots__/index.test.tsx.snap @@ -14,6 +14,7 @@ exports[`Card correct pass tabList props 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-editable ant-tabs-large ant-tabs-card ant-tabs-editable-card ant-card-head-tabs" >
@@ -76,14 +77,14 @@ exports[`Card correct pass tabList props 1`] = ` class="ant-tabs-tab-btn" id="rc-tabs-test-tab-deprecated" role="tab" - tabindex="0" + tabindex="-1" > Deprecated
} + bordered={bordered} + {...props} + /> + + ); +}; + +const App: React.FC = () => { + const [locale] = useLocale(locales); + return ( + + + + ); +}; + +export default App; diff --git a/components/descriptions/demo/style.tsx b/components/descriptions/demo/style.tsx index ee1d0fd9ce..14b67eda82 100644 --- a/components/descriptions/demo/style.tsx +++ b/components/descriptions/demo/style.tsx @@ -12,8 +12,10 @@ const items: DescriptionsProps['items'] = [ key: '1', label: 'Product', children: 'Cloud Database', - labelStyle, - contentStyle, + styles: { + label: labelStyle, + content: contentStyle, + }, }, { key: '2', @@ -42,8 +44,10 @@ const rootStyleItems: DescriptionsProps['items'] = [ key: '3', label: 'Automatic Renewal', children: 'YES', - labelStyle: { color: 'orange' }, - contentStyle: { color: 'blue' }, + styles: { + label: { color: 'orange' }, + content: { color: 'blue' }, + }, }, ]; @@ -69,8 +73,10 @@ const App: React.FC = () => { The number of span Description.Item. Span={2} takes up the width of two DescriptionItems. When both `style` and `labelStyle`(or `contentStyle`) configured, both of them will work. And next one will overwrite first when conflict. +## Semantic DOM + + + ## Design Token diff --git a/components/descriptions/index.tsx b/components/descriptions/index.tsx index 72b941415d..28a6378742 100644 --- a/components/descriptions/index.tsx +++ b/components/descriptions/index.tsx @@ -4,6 +4,7 @@ import classNames from 'classnames'; import type { Breakpoint } from '../_util/responsiveObserver'; import { matchScreen } from '../_util/responsiveObserver'; +import { devUseWarning } from '../_util/warning'; import { ConfigContext } from '../config-provider'; import useSize from '../config-provider/hooks/useSize'; import useBreakpoint from '../grid/hooks/useBreakpoint'; @@ -48,6 +49,22 @@ export interface DescriptionsProps { colon?: boolean; labelStyle?: React.CSSProperties; contentStyle?: React.CSSProperties; + styles?: { + root?: React.CSSProperties; + header?: React.CSSProperties; + title?: React.CSSProperties; + extra?: React.CSSProperties; + label?: React.CSSProperties; + content?: React.CSSProperties; + }; + classNames?: { + root?: string; + header?: string; + title?: string; + extra?: string; + label?: string; + content?: string; + }; items?: DescriptionsItemType[]; id?: string; } @@ -68,13 +85,25 @@ const Descriptions: React.FC & CompoundedComponent = (props) size: customizeSize, labelStyle, contentStyle, + styles, items, + classNames: descriptionsClassNames, ...restProps } = props; const { getPrefixCls, direction, descriptions } = React.useContext(ConfigContext); const prefixCls = getPrefixCls('descriptions', customizePrefixCls); const screens = useBreakpoint(); + // ============================== Warn ============================== + if (process.env.NODE_ENV !== 'production') { + const warning = devUseWarning('Descriptions'); + [ + ['labelStyle', 'styles={{ label: {} }}'], + ['contentStyle', 'styles={{ content: {} }}'], + ].forEach(([deprecatedName, newName]) => { + warning.deprecated(!(deprecatedName in props), deprecatedName, newName); + }); + } // Column count const mergedColumn = React.useMemo(() => { if (typeof column === 'number') { @@ -99,8 +128,19 @@ const Descriptions: React.FC & CompoundedComponent = (props) // ======================== Render ======================== const contextValue = React.useMemo( - () => ({ labelStyle, contentStyle }), - [labelStyle, contentStyle], + () => ({ + labelStyle, + contentStyle, + styles: { + content: { ...descriptions?.styles?.content, ...styles?.content }, + label: { ...descriptions?.styles?.label, ...styles?.label }, + }, + classNames: { + label: classNames(descriptions?.classNames?.label, descriptionsClassNames?.label), + content: classNames(descriptions?.classNames?.content, descriptionsClassNames?.content), + }, + }), + [labelStyle, contentStyle, styles, descriptionsClassNames, descriptions], ); return wrapCSSVar( @@ -109,6 +149,8 @@ const Descriptions: React.FC & CompoundedComponent = (props) className={classNames( prefixCls, descriptions?.className, + descriptions?.classNames?.root, + descriptionsClassNames?.root, { [`${prefixCls}-${mergedSize}`]: mergedSize && mergedSize !== 'default', [`${prefixCls}-bordered`]: !!bordered, @@ -119,13 +161,45 @@ const Descriptions: React.FC & CompoundedComponent = (props) hashId, cssVarCls, )} - style={{ ...descriptions?.style, ...style }} + style={{ ...descriptions?.style, ...descriptions?.styles?.root, ...styles?.root, ...style }} {...restProps} > {(title || extra) && ( -
- {title &&
{title}
} - {extra &&
{extra}
} +
+ {title && ( +
+ {title} +
+ )} + {extra && ( +
+ {extra} +
+ )}
)} diff --git a/components/descriptions/index.zh-CN.md b/components/descriptions/index.zh-CN.md index 68d37c6496..8f05519a9a 100644 --- a/components/descriptions/index.zh-CN.md +++ b/components/descriptions/index.zh-CN.md @@ -104,6 +104,10 @@ const items: DescriptionsProps['items'] = [ > span 是 Description.Item 的数量。 span={2} 会占用两个 DescriptionItem 的宽度。当同时配置 `style` 和 `labelStyle`(或 `contentStyle`)时,两者会同时作用。样式冲突时,后者会覆盖前者。 +## Semantic DOM + + + ## 主题变量(Design Token) diff --git a/components/drawer/__tests__/__snapshots__/demo-extend.test.tsx.snap b/components/drawer/__tests__/__snapshots__/demo-extend.test.tsx.snap index 8db6c7b085..684c3af207 100644 --- a/components/drawer/__tests__/__snapshots__/demo-extend.test.tsx.snap +++ b/components/drawer/__tests__/__snapshots__/demo-extend.test.tsx.snap @@ -500,6 +500,7 @@ Array [ > @@ -520,6 +521,7 @@ Array [ @@ -539,6 +541,7 @@ Array [ > @@ -558,6 +561,7 @@ Array [ > @@ -3150,6 +3154,7 @@ Array [ > @@ -3169,6 +3174,7 @@ Array [ > @@ -3188,6 +3194,7 @@ Array [ > @@ -3208,6 +3215,7 @@ Array [ diff --git a/components/drawer/__tests__/__snapshots__/demo.test.ts.snap b/components/drawer/__tests__/__snapshots__/demo.test.ts.snap index f656c8d563..d7da3b91ba 100644 --- a/components/drawer/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/drawer/__tests__/__snapshots__/demo.test.ts.snap @@ -136,6 +136,7 @@ exports[`renders components/drawer/demo/extra.tsx correctly 1`] = ` > @@ -156,6 +157,7 @@ exports[`renders components/drawer/demo/extra.tsx correctly 1`] = ` @@ -175,6 +177,7 @@ exports[`renders components/drawer/demo/extra.tsx correctly 1`] = ` > @@ -194,6 +197,7 @@ exports[`renders components/drawer/demo/extra.tsx correctly 1`] = ` > @@ -310,6 +314,7 @@ exports[`renders components/drawer/demo/placement.tsx correctly 1`] = ` > @@ -329,6 +334,7 @@ exports[`renders components/drawer/demo/placement.tsx correctly 1`] = ` > @@ -348,6 +354,7 @@ exports[`renders components/drawer/demo/placement.tsx correctly 1`] = ` > @@ -368,6 +375,7 @@ exports[`renders components/drawer/demo/placement.tsx correctly 1`] = ` @@ -398,7 +406,7 @@ exports[`renders components/drawer/demo/placement.tsx correctly 1`] = ` exports[`renders components/drawer/demo/render-in-current.tsx correctly 1`] = `
Render in this
Right Click on here
diff --git a/components/dropdown/index.en-US.md b/components/dropdown/index.en-US.md index ec8cf0467c..f813f73743 100644 --- a/components/dropdown/index.en-US.md +++ b/components/dropdown/index.en-US.md @@ -66,7 +66,7 @@ Same props from Dropdown. And includes additional props: | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | buttonsRender | Custom buttons inside Dropdown.Button | (buttons: ReactNode\[]) => ReactNode\[] | - | | -| loading | Set the loading status of button | boolean \| { delay: number } | false | | +| loading | Set the loading status of button, the same as [Button](/components/button/#api) | boolean \| { delay: number, icon: ReactNode } | false | icon: 5.23.0 | | danger | Set the danger status of button | boolean | - | 4.23.0 | | icon | Icon (appears on the right) | ReactNode | - | | | size | Size of the button, the same as [Button](/components/button/#api) | string | `default` | | diff --git a/components/dropdown/index.zh-CN.md b/components/dropdown/index.zh-CN.md index d198bb0380..04d8e025a6 100644 --- a/components/dropdown/index.zh-CN.md +++ b/components/dropdown/index.zh-CN.md @@ -70,7 +70,7 @@ demo: | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | buttonsRender | 自定义左右两个按钮 | (buttons: ReactNode\[]) => ReactNode\[] | - | | -| loading | 设置按钮载入状态 | boolean \| { delay: number } | false | | +| loading | 设置按钮载入状态,和 [Button](/components/button-cn#api) 一致 | boolean \| { delay: number, icon: ReactNode } | false | icon: 5.23.0 | | danger | 设置危险按钮 | boolean | - | 4.23.0 | | icon | 右侧的 icon | ReactNode | - | | | size | 按钮大小,和 [Button](/components/button-cn#api) 一致 | string | `default` | | diff --git a/components/empty/__tests__/index.test.tsx b/components/empty/__tests__/index.test.tsx index 550cc10159..90e3e321e8 100644 --- a/components/empty/__tests__/index.test.tsx +++ b/components/empty/__tests__/index.test.tsx @@ -12,7 +12,7 @@ describe('Empty', () => { rtlTest(Empty); it('image size should change', () => { - const { container } = render(); + const { container } = render(); expect(container.querySelector('.ant-empty-image')?.style.height).toBe('20px'); }); @@ -45,4 +45,50 @@ describe('Empty', () => { opacity: 0.65, }); }); + + it('should apply custom styles to Empty', () => { + const customClassNames = { + root: 'custom-root', + description: 'custom-description', + footer: 'custom-footer', + image: 'custom-image', + }; + + const customStyles = { + root: { color: 'red' }, + description: { color: 'green' }, + footer: { color: 'yellow' }, + image: { backgroundColor: 'black' }, + }; + + const { container } = render( + +
Create Now
+
, + ); + + const emptyElement = container.querySelector('.ant-empty') as HTMLElement; + const emptyFooterElement = container.querySelector('.ant-empty-footer') as HTMLElement; + const emptyDescriptionElement = container.querySelector( + '.ant-empty-description', + ) as HTMLElement; + const emptyImageElement = container.querySelector('.ant-empty-image') as HTMLElement; + + // check classNames + expect(emptyElement.classList).toContain('custom-root'); + expect(emptyFooterElement.classList).toContain('custom-footer'); + expect(emptyDescriptionElement.classList).toContain('custom-description'); + expect(emptyImageElement.classList).toContain('custom-image'); + + // check styles + expect(emptyElement.style.color).toBe('red'); + expect(emptyDescriptionElement.style.color).toBe('green'); + expect(emptyFooterElement.style.color).toBe('yellow'); + expect(emptyImageElement.style.backgroundColor).toBe('black'); + }); }); diff --git a/components/empty/demo/_semantic.tsx b/components/empty/demo/_semantic.tsx new file mode 100644 index 0000000000..0b3245a4d6 --- /dev/null +++ b/components/empty/demo/_semantic.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Button, Empty, Typography } from 'antd'; + +import SemanticPreview from '../../../.dumi/components/SemanticPreview'; +import useLocale from '../../../.dumi/hooks/useLocale'; + +const locales = { + cn: { + root: '根元素', + image: '图标元素', + description: '描述元素', + footer: '底部元素', + }, + en: { + root: 'Root element', + image: 'Image element', + description: 'Description element', + footer: 'Footer element', + }, +}; + +const App: React.FC = () => { + const [locale] = useLocale(locales); + return ( + + + Customize Description + + } + > + + + + ); +}; + +export default App; diff --git a/components/empty/demo/customize.tsx b/components/empty/demo/customize.tsx index fab55e70ea..3eb1a4573b 100644 --- a/components/empty/demo/customize.tsx +++ b/components/empty/demo/customize.tsx @@ -4,7 +4,7 @@ import { Button, Empty, Typography } from 'antd'; const App: React.FC = () => ( Customize Description diff --git a/components/empty/empty.tsx b/components/empty/empty.tsx index 70f21fb6f9..e765ebf566 100644 --- a/components/empty/empty.tsx +++ b/components/empty/empty.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { useLocale } from '../locale'; import { useToken } from '../theme/internal'; @@ -8,7 +8,7 @@ const Empty: React.FC = () => { const [, token] = useToken(); const [locale] = useLocale('Empty'); - const bgColor = new TinyColor(token.colorBgBase); + const bgColor = new FastColor(token.colorBgBase); // Dark Theme need more dark of this const themeStyle: React.CSSProperties = bgColor.toHsl().l < 0.5 ? { opacity: 0.65 } : {}; diff --git a/components/empty/index.en-US.md b/components/empty/index.en-US.md index 98a270feec..be8c84e5de 100644 --- a/components/empty/index.en-US.md +++ b/components/empty/index.en-US.md @@ -64,6 +64,10 @@ Common props ref:[Common props](/docs/react/common-props) } +## Semantic DOM + + + ## Design Token diff --git a/components/empty/index.tsx b/components/empty/index.tsx index e6d5a7fb31..2cc4b97963 100644 --- a/components/empty/index.tsx +++ b/components/empty/index.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import classNames from 'classnames'; +import { devUseWarning } from '../_util/warning'; import { ConfigContext } from '../config-provider'; import { useLocale } from '../locale'; import DefaultEmptyImg from './empty'; @@ -14,16 +15,19 @@ export interface TransferLocale { description: string; } +export type SemanticName = 'root' | 'image' | 'description' | 'footer'; export interface EmptyProps { prefixCls?: string; className?: string; rootClassName?: string; style?: React.CSSProperties; - /** @since 3.16.0 */ + /** @deprecated Please use `styles={{ image: {} }}` instead */ imageStyle?: React.CSSProperties; image?: React.ReactNode; description?: React.ReactNode; children?: React.ReactNode; + classNames?: Partial>; + styles?: Partial>; } type CompoundedComponent = React.FC & { @@ -31,17 +35,20 @@ type CompoundedComponent = React.FC & { PRESENTED_IMAGE_SIMPLE: React.ReactNode; }; -const Empty: CompoundedComponent = ({ - className, - rootClassName, - prefixCls: customizePrefixCls, - image = defaultEmptyImg, - description, - children, - imageStyle, - style, - ...restProps -}) => { +const Empty: CompoundedComponent = (props) => { + const { + className, + rootClassName, + prefixCls: customizePrefixCls, + image = defaultEmptyImg, + description, + children, + imageStyle, + style, + classNames: emptyClassNames, + styles, + ...restProps + } = props; const { getPrefixCls, direction, empty } = React.useContext(ConfigContext); const prefixCls = getPrefixCls('empty', customizePrefixCls); @@ -60,6 +67,15 @@ const Empty: CompoundedComponent = ({ imageNode = image; } + // ============================= Warning ============================== + if (process.env.NODE_ENV !== 'production') { + const warning = devUseWarning('Empty'); + + [['imageStyle', 'styles: { image: {} }']].forEach(([deprecatedName, newName]) => { + warning.deprecated(!(deprecatedName in props), deprecatedName, newName); + }); + } + return wrapCSSVar(
-
+
{imageNode}
- {des &&
{des}
} - {children &&
{children}
} + {des && ( +
+ {des} +
+ )} + {children && ( +
+ {children} +
+ )}
, ); }; diff --git a/components/empty/index.zh-CN.md b/components/empty/index.zh-CN.md index 9f00af9f42..16c162b433 100644 --- a/components/empty/index.zh-CN.md +++ b/components/empty/index.zh-CN.md @@ -65,6 +65,10 @@ coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*obM7S5lIxeMAAA } +## Semantic DOM + + + ## 主题变量(Design Token) diff --git a/components/empty/simple.tsx b/components/empty/simple.tsx index e28fa52963..869bfee6dd 100644 --- a/components/empty/simple.tsx +++ b/components/empty/simple.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useMemo } from 'react'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { useToken } from '../theme/internal'; import { useLocale } from '../locale'; @@ -13,13 +13,9 @@ const Simple: React.FC = () => { const { borderColor, shadowColor, contentColor } = useMemo( () => ({ - borderColor: new TinyColor(colorFill).onBackground(colorBgContainer).toHexShortString(), - shadowColor: new TinyColor(colorFillTertiary) - .onBackground(colorBgContainer) - .toHexShortString(), - contentColor: new TinyColor(colorFillQuaternary) - .onBackground(colorBgContainer) - .toHexShortString(), + borderColor: new FastColor(colorFill).onBackground(colorBgContainer).toHexString(), + shadowColor: new FastColor(colorFillTertiary).onBackground(colorBgContainer).toHexString(), + contentColor: new FastColor(colorFillQuaternary).onBackground(colorBgContainer).toHexString(), }), [colorFill, colorFillTertiary, colorFillQuaternary, colorBgContainer], ); diff --git a/components/flex/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/flex/__tests__/__snapshots__/demo-extend.test.ts.snap index 28269eef86..8d3d4f769f 100644 --- a/components/flex/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/flex/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -10,7 +10,8 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = `
flex-start @@ -37,12 +38,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
center @@ -53,12 +54,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
flex-end @@ -69,12 +70,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
space-between @@ -85,12 +86,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
space-around @@ -101,12 +102,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
space-evenly @@ -120,7 +121,8 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = `
flex-start @@ -147,12 +149,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
center @@ -163,12 +165,12 @@ exports[`renders components/flex/demo/align.tsx extend context correctly 1`] = ` >
flex-end @@ -234,6 +236,7 @@ exports[`renders components/flex/demo/basic.tsx extend context correctly 1`] = ` @@ -253,6 +256,7 @@ exports[`renders components/flex/demo/basic.tsx extend context correctly 1`] = ` > @@ -386,6 +390,7 @@ exports[`renders components/flex/demo/gap.tsx extend context correctly 1`] = ` @@ -405,6 +410,7 @@ exports[`renders components/flex/demo/gap.tsx extend context correctly 1`] = ` > @@ -424,6 +430,7 @@ exports[`renders components/flex/demo/gap.tsx extend context correctly 1`] = ` > @@ -443,6 +450,7 @@ exports[`renders components/flex/demo/gap.tsx extend context correctly 1`] = ` > diff --git a/components/flex/__tests__/__snapshots__/demo.test.ts.snap b/components/flex/__tests__/__snapshots__/demo.test.ts.snap index 2834493b42..fc09c0e0ab 100644 --- a/components/flex/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/flex/__tests__/__snapshots__/demo.test.ts.snap @@ -10,7 +10,8 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = `
flex-start @@ -37,12 +38,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
center @@ -53,12 +54,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
flex-end @@ -69,12 +70,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
space-between @@ -85,12 +86,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
space-around @@ -101,12 +102,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
space-evenly @@ -120,7 +121,8 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = `
flex-start @@ -147,12 +149,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
center @@ -163,12 +165,12 @@ exports[`renders components/flex/demo/align.tsx correctly 1`] = ` >
flex-end @@ -232,6 +234,7 @@ exports[`renders components/flex/demo/basic.tsx correctly 1`] = ` @@ -251,6 +254,7 @@ exports[`renders components/flex/demo/basic.tsx correctly 1`] = ` > @@ -378,6 +382,7 @@ exports[`renders components/flex/demo/gap.tsx correctly 1`] = ` @@ -397,6 +402,7 @@ exports[`renders components/flex/demo/gap.tsx correctly 1`] = ` > @@ -416,6 +422,7 @@ exports[`renders components/flex/demo/gap.tsx correctly 1`] = ` > @@ -435,6 +442,7 @@ exports[`renders components/flex/demo/gap.tsx correctly 1`] = ` > diff --git a/components/form/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/form/__tests__/__snapshots__/demo-extend.test.ts.snap index 40208dfa52..87f47f2cd2 100644 --- a/components/form/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/form/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -2469,6 +2469,7 @@ Array [ @@ -2489,6 +2490,7 @@ Array [ @@ -2757,7 +2759,6 @@ Array [
@@ -59325,6 +59323,7 @@ exports[`Locale Provider should display the text as en 1`] = ` @@ -59344,6 +59343,7 @@ exports[`Locale Provider should display the text as en 1`] = ` > @@ -64171,10 +64171,9 @@ exports[`Locale Provider should display the text as en-gb 1`] = ` - - +
@@ -64408,10 +64407,9 @@ exports[`Locale Provider should display the text as en-gb 1`] = ` - - +
@@ -64638,6 +64636,7 @@ exports[`Locale Provider should display the text as en-gb 1`] = ` @@ -64657,6 +64656,7 @@ exports[`Locale Provider should display the text as en-gb 1`] = ` > @@ -69484,10 +69484,9 @@ exports[`Locale Provider should display the text as es 1`] = ` - - +
@@ -69721,10 +69720,9 @@ exports[`Locale Provider should display the text as es 1`] = ` - - +
@@ -69951,6 +69949,7 @@ exports[`Locale Provider should display the text as es 1`] = ` @@ -69970,6 +69969,7 @@ exports[`Locale Provider should display the text as es 1`] = ` > @@ -74797,10 +74797,9 @@ exports[`Locale Provider should display the text as et 1`] = ` - - +
@@ -75034,10 +75033,9 @@ exports[`Locale Provider should display the text as et 1`] = ` - - +
@@ -75264,6 +75262,7 @@ exports[`Locale Provider should display the text as et 1`] = ` @@ -75283,6 +75282,7 @@ exports[`Locale Provider should display the text as et 1`] = ` > @@ -80110,10 +80110,9 @@ exports[`Locale Provider should display the text as eu 1`] = ` - - +
@@ -80347,10 +80346,9 @@ exports[`Locale Provider should display the text as eu 1`] = ` - - +
@@ -80577,6 +80575,7 @@ exports[`Locale Provider should display the text as eu 1`] = ` @@ -80596,6 +80595,7 @@ exports[`Locale Provider should display the text as eu 1`] = ` > @@ -85423,10 +85423,9 @@ exports[`Locale Provider should display the text as fa 1`] = ` - - +
@@ -85660,10 +85659,9 @@ exports[`Locale Provider should display the text as fa 1`] = ` - - +
@@ -85890,6 +85888,7 @@ exports[`Locale Provider should display the text as fa 1`] = ` @@ -85909,6 +85908,7 @@ exports[`Locale Provider should display the text as fa 1`] = ` > @@ -90736,10 +90736,9 @@ exports[`Locale Provider should display the text as fi 1`] = ` - - +
@@ -90973,10 +90972,9 @@ exports[`Locale Provider should display the text as fi 1`] = ` - - +
@@ -91203,6 +91201,7 @@ exports[`Locale Provider should display the text as fi 1`] = ` @@ -91222,6 +91221,7 @@ exports[`Locale Provider should display the text as fi 1`] = ` > @@ -96049,10 +96049,9 @@ exports[`Locale Provider should display the text as fr 1`] = ` - - +
@@ -96286,10 +96285,9 @@ exports[`Locale Provider should display the text as fr 1`] = ` - - +
@@ -96516,6 +96514,7 @@ exports[`Locale Provider should display the text as fr 1`] = ` @@ -96535,6 +96534,7 @@ exports[`Locale Provider should display the text as fr 1`] = ` > @@ -101362,10 +101362,9 @@ exports[`Locale Provider should display the text as fr 2`] = ` - - +
@@ -101599,10 +101598,9 @@ exports[`Locale Provider should display the text as fr 2`] = ` - - +
@@ -101829,6 +101827,7 @@ exports[`Locale Provider should display the text as fr 2`] = ` @@ -101848,6 +101847,7 @@ exports[`Locale Provider should display the text as fr 2`] = ` > @@ -106675,10 +106675,9 @@ exports[`Locale Provider should display the text as fr 3`] = ` - - +
@@ -106912,10 +106911,9 @@ exports[`Locale Provider should display the text as fr 3`] = ` - - +
@@ -107142,6 +107140,7 @@ exports[`Locale Provider should display the text as fr 3`] = ` @@ -107161,6 +107160,7 @@ exports[`Locale Provider should display the text as fr 3`] = ` > @@ -111988,10 +111988,9 @@ exports[`Locale Provider should display the text as ga 1`] = ` - - +
@@ -112225,10 +112224,9 @@ exports[`Locale Provider should display the text as ga 1`] = ` - - +
@@ -112455,6 +112453,7 @@ exports[`Locale Provider should display the text as ga 1`] = ` @@ -112474,6 +112473,7 @@ exports[`Locale Provider should display the text as ga 1`] = ` > @@ -117301,10 +117301,9 @@ exports[`Locale Provider should display the text as gl 1`] = ` - - +
@@ -117538,10 +117537,9 @@ exports[`Locale Provider should display the text as gl 1`] = ` - - +
@@ -117768,6 +117766,7 @@ exports[`Locale Provider should display the text as gl 1`] = ` @@ -117787,6 +117786,7 @@ exports[`Locale Provider should display the text as gl 1`] = ` > @@ -122614,10 +122614,9 @@ exports[`Locale Provider should display the text as he 1`] = ` - - +
@@ -122851,10 +122850,9 @@ exports[`Locale Provider should display the text as he 1`] = ` - - +
@@ -123081,6 +123079,7 @@ exports[`Locale Provider should display the text as he 1`] = ` @@ -123100,6 +123099,7 @@ exports[`Locale Provider should display the text as he 1`] = ` > @@ -127927,10 +127927,9 @@ exports[`Locale Provider should display the text as hi 1`] = ` - - +
@@ -128164,10 +128163,9 @@ exports[`Locale Provider should display the text as hi 1`] = ` - - +
@@ -128394,6 +128392,7 @@ exports[`Locale Provider should display the text as hi 1`] = ` @@ -128413,6 +128412,7 @@ exports[`Locale Provider should display the text as hi 1`] = ` > @@ -133240,10 +133240,9 @@ exports[`Locale Provider should display the text as hr 1`] = ` - - +
@@ -133477,10 +133476,9 @@ exports[`Locale Provider should display the text as hr 1`] = ` - - +
@@ -133707,6 +133705,7 @@ exports[`Locale Provider should display the text as hr 1`] = ` @@ -133726,6 +133725,7 @@ exports[`Locale Provider should display the text as hr 1`] = ` > @@ -138553,10 +138553,9 @@ exports[`Locale Provider should display the text as hu 1`] = ` - - +
@@ -138790,10 +138789,9 @@ exports[`Locale Provider should display the text as hu 1`] = ` - - +
@@ -139020,6 +139018,7 @@ exports[`Locale Provider should display the text as hu 1`] = ` @@ -139039,6 +139038,7 @@ exports[`Locale Provider should display the text as hu 1`] = ` > @@ -143866,10 +143866,9 @@ exports[`Locale Provider should display the text as hy-am 1`] = ` - - +
@@ -144103,10 +144102,9 @@ exports[`Locale Provider should display the text as hy-am 1`] = ` - - +
@@ -144333,6 +144331,7 @@ exports[`Locale Provider should display the text as hy-am 1`] = ` @@ -144352,6 +144351,7 @@ exports[`Locale Provider should display the text as hy-am 1`] = ` > @@ -149179,10 +149179,9 @@ exports[`Locale Provider should display the text as id 1`] = ` - - +
@@ -149416,10 +149415,9 @@ exports[`Locale Provider should display the text as id 1`] = ` - - +
@@ -149646,6 +149644,7 @@ exports[`Locale Provider should display the text as id 1`] = ` @@ -149665,6 +149664,7 @@ exports[`Locale Provider should display the text as id 1`] = ` > @@ -154492,10 +154492,9 @@ exports[`Locale Provider should display the text as is 1`] = ` - - + @@ -154729,10 +154728,9 @@ exports[`Locale Provider should display the text as is 1`] = ` - - + @@ -154959,6 +154957,7 @@ exports[`Locale Provider should display the text as is 1`] = ` @@ -154978,6 +154977,7 @@ exports[`Locale Provider should display the text as is 1`] = ` > @@ -159805,10 +159805,9 @@ exports[`Locale Provider should display the text as it 1`] = ` - - + @@ -160042,10 +160041,9 @@ exports[`Locale Provider should display the text as it 1`] = ` - - + @@ -160272,6 +160270,7 @@ exports[`Locale Provider should display the text as it 1`] = ` @@ -160291,6 +160290,7 @@ exports[`Locale Provider should display the text as it 1`] = ` > @@ -165118,10 +165118,9 @@ exports[`Locale Provider should display the text as ja 1`] = ` - - + @@ -165355,10 +165354,9 @@ exports[`Locale Provider should display the text as ja 1`] = ` - - + @@ -165585,6 +165583,7 @@ exports[`Locale Provider should display the text as ja 1`] = ` @@ -165604,6 +165603,7 @@ exports[`Locale Provider should display the text as ja 1`] = ` > @@ -170431,10 +170431,9 @@ exports[`Locale Provider should display the text as ka 1`] = ` - - + @@ -170668,10 +170667,9 @@ exports[`Locale Provider should display the text as ka 1`] = ` - - + @@ -170898,6 +170896,7 @@ exports[`Locale Provider should display the text as ka 1`] = ` @@ -170917,6 +170916,7 @@ exports[`Locale Provider should display the text as ka 1`] = ` > @@ -175744,10 +175744,9 @@ exports[`Locale Provider should display the text as kk 1`] = ` - - + @@ -175981,10 +175980,9 @@ exports[`Locale Provider should display the text as kk 1`] = ` - - + @@ -176211,6 +176209,7 @@ exports[`Locale Provider should display the text as kk 1`] = ` @@ -176230,6 +176229,7 @@ exports[`Locale Provider should display the text as kk 1`] = ` > @@ -181056,10 +181056,9 @@ exports[`Locale Provider should display the text as km 1`] = ` - - + @@ -181292,10 +181291,9 @@ exports[`Locale Provider should display the text as km 1`] = ` - - + @@ -181522,6 +181520,7 @@ exports[`Locale Provider should display the text as km 1`] = ` @@ -181541,6 +181540,7 @@ exports[`Locale Provider should display the text as km 1`] = ` > @@ -186368,10 +186368,9 @@ exports[`Locale Provider should display the text as kn 1`] = ` - - + @@ -186605,10 +186604,9 @@ exports[`Locale Provider should display the text as kn 1`] = ` - - + @@ -186835,6 +186833,7 @@ exports[`Locale Provider should display the text as kn 1`] = ` @@ -186854,6 +186853,7 @@ exports[`Locale Provider should display the text as kn 1`] = ` > @@ -191681,10 +191681,9 @@ exports[`Locale Provider should display the text as ko 1`] = ` - - + @@ -191918,10 +191917,9 @@ exports[`Locale Provider should display the text as ko 1`] = ` - - + @@ -192148,6 +192146,7 @@ exports[`Locale Provider should display the text as ko 1`] = ` @@ -192167,6 +192166,7 @@ exports[`Locale Provider should display the text as ko 1`] = ` > @@ -196994,10 +196994,9 @@ exports[`Locale Provider should display the text as ku 1`] = ` - - + @@ -197231,10 +197230,9 @@ exports[`Locale Provider should display the text as ku 1`] = ` - - + @@ -197461,6 +197459,7 @@ exports[`Locale Provider should display the text as ku 1`] = ` @@ -197480,6 +197479,7 @@ exports[`Locale Provider should display the text as ku 1`] = ` > @@ -202307,10 +202307,9 @@ exports[`Locale Provider should display the text as ku-iq 1`] = ` - - + @@ -202544,10 +202543,9 @@ exports[`Locale Provider should display the text as ku-iq 1`] = ` - - + @@ -202774,6 +202772,7 @@ exports[`Locale Provider should display the text as ku-iq 1`] = ` @@ -202793,6 +202792,7 @@ exports[`Locale Provider should display the text as ku-iq 1`] = ` > @@ -207620,10 +207620,9 @@ exports[`Locale Provider should display the text as lt 1`] = ` - - + @@ -207857,10 +207856,9 @@ exports[`Locale Provider should display the text as lt 1`] = ` - - + @@ -208087,6 +208085,7 @@ exports[`Locale Provider should display the text as lt 1`] = ` @@ -208106,6 +208105,7 @@ exports[`Locale Provider should display the text as lt 1`] = ` > @@ -212933,10 +212933,9 @@ exports[`Locale Provider should display the text as lv 1`] = ` - - + @@ -213170,10 +213169,9 @@ exports[`Locale Provider should display the text as lv 1`] = ` - - + @@ -213400,6 +213398,7 @@ exports[`Locale Provider should display the text as lv 1`] = ` @@ -213419,6 +213418,7 @@ exports[`Locale Provider should display the text as lv 1`] = ` > @@ -218246,10 +218246,9 @@ exports[`Locale Provider should display the text as mk 1`] = ` - - + @@ -218483,10 +218482,9 @@ exports[`Locale Provider should display the text as mk 1`] = ` - - + @@ -218713,6 +218711,7 @@ exports[`Locale Provider should display the text as mk 1`] = ` @@ -218732,6 +218731,7 @@ exports[`Locale Provider should display the text as mk 1`] = ` > @@ -223559,10 +223559,9 @@ exports[`Locale Provider should display the text as ml 1`] = ` - - + @@ -223796,10 +223795,9 @@ exports[`Locale Provider should display the text as ml 1`] = ` - - + @@ -224026,6 +224024,7 @@ exports[`Locale Provider should display the text as ml 1`] = ` @@ -224045,6 +224044,7 @@ exports[`Locale Provider should display the text as ml 1`] = ` > @@ -228872,10 +228872,9 @@ exports[`Locale Provider should display the text as mn-mn 1`] = ` - - + @@ -229109,10 +229108,9 @@ exports[`Locale Provider should display the text as mn-mn 1`] = ` - - + @@ -229339,6 +229337,7 @@ exports[`Locale Provider should display the text as mn-mn 1`] = ` @@ -229358,6 +229357,7 @@ exports[`Locale Provider should display the text as mn-mn 1`] = ` > @@ -234185,10 +234185,9 @@ exports[`Locale Provider should display the text as ms-my 1`] = ` - - + @@ -234422,10 +234421,9 @@ exports[`Locale Provider should display the text as ms-my 1`] = ` - - + @@ -234652,6 +234650,7 @@ exports[`Locale Provider should display the text as ms-my 1`] = ` @@ -234671,6 +234670,7 @@ exports[`Locale Provider should display the text as ms-my 1`] = ` > @@ -239498,10 +239498,9 @@ exports[`Locale Provider should display the text as my 1`] = ` - - + @@ -239735,10 +239734,9 @@ exports[`Locale Provider should display the text as my 1`] = ` - - + @@ -239965,6 +239963,7 @@ exports[`Locale Provider should display the text as my 1`] = ` @@ -239984,6 +239983,7 @@ exports[`Locale Provider should display the text as my 1`] = ` > @@ -244811,10 +244811,9 @@ exports[`Locale Provider should display the text as nb 1`] = ` - - + @@ -245048,10 +245047,9 @@ exports[`Locale Provider should display the text as nb 1`] = ` - - + @@ -245278,6 +245276,7 @@ exports[`Locale Provider should display the text as nb 1`] = ` @@ -245297,6 +245296,7 @@ exports[`Locale Provider should display the text as nb 1`] = ` > @@ -250124,10 +250124,9 @@ exports[`Locale Provider should display the text as ne-np 1`] = ` - - + @@ -250361,10 +250360,9 @@ exports[`Locale Provider should display the text as ne-np 1`] = ` - - + @@ -250591,6 +250589,7 @@ exports[`Locale Provider should display the text as ne-np 1`] = ` @@ -250610,6 +250609,7 @@ exports[`Locale Provider should display the text as ne-np 1`] = ` > @@ -255437,10 +255437,9 @@ exports[`Locale Provider should display the text as nl 1`] = ` - - + @@ -255674,10 +255673,9 @@ exports[`Locale Provider should display the text as nl 1`] = ` - - + @@ -255904,6 +255902,7 @@ exports[`Locale Provider should display the text as nl 1`] = ` @@ -255923,6 +255922,7 @@ exports[`Locale Provider should display the text as nl 1`] = ` > @@ -260750,10 +260750,9 @@ exports[`Locale Provider should display the text as nl-be 1`] = ` - - + @@ -260987,10 +260986,9 @@ exports[`Locale Provider should display the text as nl-be 1`] = ` - - + @@ -261217,6 +261215,7 @@ exports[`Locale Provider should display the text as nl-be 1`] = ` @@ -261236,6 +261235,7 @@ exports[`Locale Provider should display the text as nl-be 1`] = ` > @@ -266063,10 +266063,9 @@ exports[`Locale Provider should display the text as pl 1`] = ` - - + @@ -266300,10 +266299,9 @@ exports[`Locale Provider should display the text as pl 1`] = ` - - + @@ -266530,6 +266528,7 @@ exports[`Locale Provider should display the text as pl 1`] = ` @@ -266549,6 +266548,7 @@ exports[`Locale Provider should display the text as pl 1`] = ` > @@ -271376,10 +271376,9 @@ exports[`Locale Provider should display the text as pt 1`] = ` - - + @@ -271613,10 +271612,9 @@ exports[`Locale Provider should display the text as pt 1`] = ` - - + @@ -271843,6 +271841,7 @@ exports[`Locale Provider should display the text as pt 1`] = ` @@ -271862,6 +271861,7 @@ exports[`Locale Provider should display the text as pt 1`] = ` > @@ -276689,10 +276689,9 @@ exports[`Locale Provider should display the text as pt-br 1`] = ` - - + @@ -276926,10 +276925,9 @@ exports[`Locale Provider should display the text as pt-br 1`] = ` - - + @@ -277156,6 +277154,7 @@ exports[`Locale Provider should display the text as pt-br 1`] = ` @@ -277175,6 +277174,7 @@ exports[`Locale Provider should display the text as pt-br 1`] = ` > @@ -282002,10 +282002,9 @@ exports[`Locale Provider should display the text as ro 1`] = ` - - + @@ -282239,10 +282238,9 @@ exports[`Locale Provider should display the text as ro 1`] = ` - - + @@ -282469,6 +282467,7 @@ exports[`Locale Provider should display the text as ro 1`] = ` @@ -282488,6 +282487,7 @@ exports[`Locale Provider should display the text as ro 1`] = ` > @@ -287315,10 +287315,9 @@ exports[`Locale Provider should display the text as ru 1`] = ` - - + @@ -287552,10 +287551,9 @@ exports[`Locale Provider should display the text as ru 1`] = ` - - + @@ -287782,6 +287780,7 @@ exports[`Locale Provider should display the text as ru 1`] = ` @@ -287801,6 +287800,7 @@ exports[`Locale Provider should display the text as ru 1`] = ` > @@ -292628,10 +292628,9 @@ exports[`Locale Provider should display the text as si 1`] = ` - - + @@ -292865,10 +292864,9 @@ exports[`Locale Provider should display the text as si 1`] = ` - - + @@ -293095,6 +293093,7 @@ exports[`Locale Provider should display the text as si 1`] = ` @@ -293114,6 +293113,7 @@ exports[`Locale Provider should display the text as si 1`] = ` > @@ -297941,10 +297941,9 @@ exports[`Locale Provider should display the text as sk 1`] = ` - - + @@ -298178,10 +298177,9 @@ exports[`Locale Provider should display the text as sk 1`] = ` - - + @@ -298408,6 +298406,7 @@ exports[`Locale Provider should display the text as sk 1`] = ` @@ -298427,6 +298426,7 @@ exports[`Locale Provider should display the text as sk 1`] = ` > @@ -303254,10 +303254,9 @@ exports[`Locale Provider should display the text as sl 1`] = ` - - + @@ -303491,10 +303490,9 @@ exports[`Locale Provider should display the text as sl 1`] = ` - - + @@ -303721,6 +303719,7 @@ exports[`Locale Provider should display the text as sl 1`] = ` @@ -303740,6 +303739,7 @@ exports[`Locale Provider should display the text as sl 1`] = ` > @@ -308567,10 +308567,9 @@ exports[`Locale Provider should display the text as sr 1`] = ` - - + @@ -308804,10 +308803,9 @@ exports[`Locale Provider should display the text as sr 1`] = ` - - + @@ -309034,6 +309032,7 @@ exports[`Locale Provider should display the text as sr 1`] = ` @@ -309053,6 +309052,7 @@ exports[`Locale Provider should display the text as sr 1`] = ` > @@ -313880,10 +313880,9 @@ exports[`Locale Provider should display the text as sv 1`] = ` - - + @@ -314117,10 +314116,9 @@ exports[`Locale Provider should display the text as sv 1`] = ` - - + @@ -314347,6 +314345,7 @@ exports[`Locale Provider should display the text as sv 1`] = ` @@ -314366,6 +314365,7 @@ exports[`Locale Provider should display the text as sv 1`] = ` > @@ -319193,10 +319193,9 @@ exports[`Locale Provider should display the text as ta 1`] = ` - - + @@ -319430,10 +319429,9 @@ exports[`Locale Provider should display the text as ta 1`] = ` - - + @@ -319660,6 +319658,7 @@ exports[`Locale Provider should display the text as ta 1`] = ` @@ -319679,6 +319678,7 @@ exports[`Locale Provider should display the text as ta 1`] = ` > @@ -324506,10 +324506,9 @@ exports[`Locale Provider should display the text as th 1`] = ` - - + @@ -324743,10 +324742,9 @@ exports[`Locale Provider should display the text as th 1`] = ` - - + @@ -324973,6 +324971,7 @@ exports[`Locale Provider should display the text as th 1`] = ` @@ -324992,6 +324991,7 @@ exports[`Locale Provider should display the text as th 1`] = ` > @@ -329819,10 +329819,9 @@ exports[`Locale Provider should display the text as tk 1`] = ` - - + @@ -330056,10 +330055,9 @@ exports[`Locale Provider should display the text as tk 1`] = ` - - + @@ -330286,6 +330284,7 @@ exports[`Locale Provider should display the text as tk 1`] = ` @@ -330305,6 +330304,7 @@ exports[`Locale Provider should display the text as tk 1`] = ` > @@ -335132,10 +335132,9 @@ exports[`Locale Provider should display the text as tr 1`] = ` - - + @@ -335369,10 +335368,9 @@ exports[`Locale Provider should display the text as tr 1`] = ` - - + @@ -335599,6 +335597,7 @@ exports[`Locale Provider should display the text as tr 1`] = ` @@ -335618,6 +335617,7 @@ exports[`Locale Provider should display the text as tr 1`] = ` > @@ -340445,10 +340445,9 @@ exports[`Locale Provider should display the text as uk 1`] = ` - - + @@ -340682,10 +340681,9 @@ exports[`Locale Provider should display the text as uk 1`] = ` - - + @@ -340912,6 +340910,7 @@ exports[`Locale Provider should display the text as uk 1`] = ` @@ -340931,6 +340930,7 @@ exports[`Locale Provider should display the text as uk 1`] = ` > @@ -345758,10 +345758,9 @@ exports[`Locale Provider should display the text as ur 1`] = ` - - + @@ -345995,10 +345994,9 @@ exports[`Locale Provider should display the text as ur 1`] = ` - - + @@ -346225,6 +346223,7 @@ exports[`Locale Provider should display the text as ur 1`] = ` @@ -346244,6 +346243,7 @@ exports[`Locale Provider should display the text as ur 1`] = ` > @@ -351071,10 +351071,9 @@ exports[`Locale Provider should display the text as uz-latn 1`] = ` - - + @@ -351308,10 +351307,9 @@ exports[`Locale Provider should display the text as uz-latn 1`] = ` - - + @@ -351538,6 +351536,7 @@ exports[`Locale Provider should display the text as uz-latn 1`] = ` @@ -351557,6 +351556,7 @@ exports[`Locale Provider should display the text as uz-latn 1`] = ` > @@ -356384,10 +356384,9 @@ exports[`Locale Provider should display the text as vi 1`] = ` - - + @@ -356621,10 +356620,9 @@ exports[`Locale Provider should display the text as vi 1`] = ` - - + @@ -356851,6 +356849,7 @@ exports[`Locale Provider should display the text as vi 1`] = ` @@ -356870,6 +356869,7 @@ exports[`Locale Provider should display the text as vi 1`] = ` > @@ -361697,10 +361697,9 @@ exports[`Locale Provider should display the text as zh-cn 1`] = ` - - + @@ -361934,10 +361933,9 @@ exports[`Locale Provider should display the text as zh-cn 1`] = ` - - + @@ -362164,6 +362162,7 @@ exports[`Locale Provider should display the text as zh-cn 1`] = ` @@ -362183,6 +362182,7 @@ exports[`Locale Provider should display the text as zh-cn 1`] = ` > @@ -367010,10 +367010,9 @@ exports[`Locale Provider should display the text as zh-hk 1`] = ` - - + @@ -367247,10 +367246,9 @@ exports[`Locale Provider should display the text as zh-hk 1`] = ` - - + @@ -367477,6 +367475,7 @@ exports[`Locale Provider should display the text as zh-hk 1`] = ` @@ -367496,6 +367495,7 @@ exports[`Locale Provider should display the text as zh-hk 1`] = ` > @@ -372323,10 +372323,9 @@ exports[`Locale Provider should display the text as zh-tw 1`] = ` - - + @@ -372560,10 +372559,9 @@ exports[`Locale Provider should display the text as zh-tw 1`] = ` - - + @@ -372790,6 +372788,7 @@ exports[`Locale Provider should display the text as zh-tw 1`] = ` @@ -372809,6 +372808,7 @@ exports[`Locale Provider should display the text as zh-tw 1`] = ` > diff --git a/components/mentions/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/mentions/__tests__/__snapshots__/demo-extend.test.ts.snap index 1d3acc0fee..6e73c5b381 100644 --- a/components/mentions/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/mentions/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -18,10 +18,9 @@ Array [ - - + ,
, @@ -64,10 +63,9 @@ Array [ - - + ,
, @@ -110,10 +108,9 @@ Array [ - - + , ] diff --git a/components/mentions/__tests__/__snapshots__/demo.test.tsx.snap b/components/mentions/__tests__/__snapshots__/demo.test.tsx.snap index 8eef233cb6..3d18e5a013 100644 --- a/components/mentions/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/mentions/__tests__/__snapshots__/demo.test.tsx.snap @@ -18,10 +18,9 @@ Array [ - - + ,
, @@ -64,10 +63,9 @@ Array [ - - + ,
, @@ -110,10 +108,9 @@ Array [ - - + , ] diff --git a/components/mentions/index.en-US.md b/components/mentions/index.en-US.md index 10b50ef784..aeed53f00d 100644 --- a/components/mentions/index.en-US.md +++ b/components/mentions/index.en-US.md @@ -79,6 +79,7 @@ Common props ref:[Common props](/docs/react/common-props) | onResize | The callback function that is triggered when textarea resize | function({ width, height }) | - | | | onSearch | Trigger when prefix hit | (text: string, prefix: string) => void | - | | | onSelect | Trigger when user select the option | (option: OptionProps, prefix: string) => void | - | | +| onPopupScroll | Trigger when mentions scroll | (e: Event) => void | - | 5.23.0 | | options | Option Configuration | [Options](#option) | \[] | 5.1.0 | ### Mention methods diff --git a/components/mentions/index.zh-CN.md b/components/mentions/index.zh-CN.md index efadfd3b37..f3eef8cd36 100644 --- a/components/mentions/index.zh-CN.md +++ b/components/mentions/index.zh-CN.md @@ -80,6 +80,7 @@ return ( | onResize | resize 回调 | function({ width, height }) | - | | | onSearch | 搜索时触发 | (text: string, prefix: string) => void | - | | | onSelect | 选择选项时触发 | (option: OptionProps, prefix: string) => void | - | | +| onPopupScroll | 滚动时触发 | (event: Event) => void | - | 5.23.0 | | options | 选项配置 | [Options](#option) | [] | 5.1.0 | ### Mentions 方法 diff --git a/components/mentions/style/index.ts b/components/mentions/style/index.ts index 46ca2db5d7..ad3472db10 100644 --- a/components/mentions/style/index.ts +++ b/components/mentions/style/index.ts @@ -134,6 +134,10 @@ const genMentionsStyle: GenerateStyle = (token) => { cursor: 'pointer', transition: `color ${motionDurationSlow}`, + border: 'none', + outline: 'none', + backgroundColor: 'transparent', + '&:hover': { color: colorTextTertiary, }, diff --git a/components/menu/MenuItem.tsx b/components/menu/MenuItem.tsx index 60b44af953..51b0c6af09 100644 --- a/components/menu/MenuItem.tsx +++ b/components/menu/MenuItem.tsx @@ -116,7 +116,7 @@ const MenuItem: GenericComponent = (props) => { {returnNode} diff --git a/components/menu/style/index.ts b/components/menu/style/index.ts index cf965730c8..5322192945 100644 --- a/components/menu/style/index.ts +++ b/components/menu/style/index.ts @@ -1,7 +1,7 @@ import type { CSSProperties } from 'react'; import type { CSSObject } from '@ant-design/cssinjs'; import { unit } from '@ant-design/cssinjs'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import type { CssUtil } from 'antd-style'; import { clearFix, resetComponent, resetIcon } from '../../style'; @@ -95,6 +95,11 @@ export interface ComponentToken { * @descEN Color of selected menu item text */ itemSelectedColor: string; + /** + * @desc 子菜单内有选中项时,子菜单标题色 + * @descEN Color of submenu title when submenu has selected item + */ + subMenuItemSelectedColor: string; /** @deprecated Use `horizontalItemSelectedColor` instead */ colorItemTextSelectedHorizontal: string; @@ -871,7 +876,7 @@ export const prepareComponentToken: GetDefaultToken<'Menu'> = (token) => { const activeBarBorderWidth = token.activeBarBorderWidth ?? lineWidth; const itemMarginInline = token.itemMarginInline ?? token.marginXXS; - const colorTextDark = new TinyColor(colorTextLightSolid).setAlpha(0.65).toRgbString(); + const colorTextDark = new FastColor(colorTextLightSolid).setA(0.65).toRgbString(); return { dropdownWidth: 160, @@ -890,6 +895,7 @@ export const prepareComponentToken: GetDefaultToken<'Menu'> = (token) => { groupTitleColor: colorTextDescription, colorItemTextSelected: colorPrimary, itemSelectedColor: colorPrimary, + subMenuItemSelectedColor: colorPrimary, colorItemTextSelectedHorizontal: colorPrimary, horizontalItemSelectedColor: colorPrimary, colorItemBg: colorBgContainer, @@ -944,7 +950,7 @@ export const prepareComponentToken: GetDefaultToken<'Menu'> = (token) => { groupTitleFontSize: fontSize, // Disabled - darkItemDisabledColor: new TinyColor(colorTextLightSolid).setAlpha(0.25).toRgbString(), + darkItemDisabledColor: new FastColor(colorTextLightSolid).setA(0.25).toRgbString(), // Dark darkItemColor: colorTextDark, diff --git a/components/menu/style/theme.ts b/components/menu/style/theme.ts index b73961e511..98f482bf4c 100644 --- a/components/menu/style/theme.ts +++ b/components/menu/style/theme.ts @@ -13,6 +13,7 @@ const getThemeStyle = (token: MenuToken, themeSuffix: string): CSSInterpolation componentCls, itemColor, itemSelectedColor, + subMenuItemSelectedColor, groupTitleColor, itemBg, subMenuItemBg, @@ -67,10 +68,8 @@ const getThemeStyle = (token: MenuToken, themeSuffix: string): CSSInterpolation }, }, - [`${componentCls}-submenu-selected`]: { - [`> ${componentCls}-submenu-title`]: { - color: itemSelectedColor, - }, + [`${componentCls}-submenu-selected > ${componentCls}-submenu-title`]: { + color: subMenuItemSelectedColor, }, [`${componentCls}-item, ${componentCls}-submenu-title`]: { diff --git a/components/modal/ConfirmDialog.tsx b/components/modal/ConfirmDialog.tsx index 973d450f11..097a40b8b6 100644 --- a/components/modal/ConfirmDialog.tsx +++ b/components/modal/ConfirmDialog.tsx @@ -173,11 +173,6 @@ const ConfirmDialog: React.FC = (props) => { const { close, zIndex, - afterClose, - open, - keyboard, - centered, - getContainer, maskStyle, direction, prefixCls, @@ -185,9 +180,6 @@ const ConfirmDialog: React.FC = (props) => { rootPrefixCls, bodyStyle, closable = false, - closeIcon, - modalRender, - focusTriggerAfterClose, onConfirm, styles, } = props; @@ -234,7 +226,7 @@ const ConfirmDialog: React.FC = (props) => { // ========================= Render ========================= return ( = (props) => { close?.({ triggerCancel: true }); onConfirm?.(false); }} - open={open} title="" footer={null} transitionName={getTransitionName(rootPrefixCls || '', 'zoom', props.transitionName)} @@ -255,14 +246,7 @@ const ConfirmDialog: React.FC = (props) => { styles={{ body: bodyStyle, mask: maskStyle, ...styles }} width={width} zIndex={mergedZIndex} - afterClose={afterClose} - keyboard={keyboard} - centered={centered} - getContainer={getContainer} closable={closable} - closeIcon={closeIcon} - modalRender={modalRender} - focusTriggerAfterClose={focusTriggerAfterClose} > diff --git a/components/modal/Modal.tsx b/components/modal/Modal.tsx index 3533c01568..367fceb15d 100644 --- a/components/modal/Modal.tsx +++ b/components/modal/Modal.tsx @@ -7,6 +7,7 @@ import ContextIsolator from '../_util/ContextIsolator'; import useClosable, { pickClosable } from '../_util/hooks/useClosable'; import { useZIndex } from '../_util/hooks/useZIndex'; import { getTransitionName } from '../_util/motion'; +import { Breakpoint } from '../_util/responsiveObserver'; import { canUseDocElement } from '../_util/styleChecker'; import { devUseWarning } from '../_util/warning'; import zIndexContext from '../_util/zindexContext'; @@ -124,12 +125,36 @@ const Modal: React.FC = (props) => { // ============================ zIndex ============================ const [zIndex, contextZIndex] = useZIndex('Modal', restProps.zIndex); + // =========================== Width ============================ + const [numWidth, responsiveWidth] = React.useMemo< + [string | number | undefined, Partial> | undefined] + >(() => { + if (width && typeof width === 'object') { + return [undefined, width]; + } + return [width, undefined]; + }, [width]); + + const responsiveWidthVars = React.useMemo(() => { + const vars: Record = {}; + if (responsiveWidth) { + Object.keys(responsiveWidth).forEach((breakpoint) => { + const breakpointWidth = responsiveWidth[breakpoint as Breakpoint]; + if (breakpointWidth !== undefined) { + vars[`--${prefixCls}-${breakpoint}-width`] = + typeof breakpointWidth === 'number' ? `${breakpointWidth}px` : breakpointWidth; + } + }); + } + return vars; + }, [responsiveWidth]); + // =========================== Render =========================== return wrapCSSVar( = (props) => { transitionName={getTransitionName(rootPrefixCls, 'zoom', props.transitionName)} maskTransitionName={getTransitionName(rootPrefixCls, 'fade', props.maskTransitionName)} className={classNames(hashId, className, modalContext?.className)} - style={{ ...modalContext?.style, ...style }} + style={{ ...modalContext?.style, ...style, ...responsiveWidthVars }} classNames={{ ...modalContext?.classNames, ...modalClassNames, diff --git a/components/modal/__tests__/Modal.test.tsx b/components/modal/__tests__/Modal.test.tsx index c432b9446c..134d126bd2 100644 --- a/components/modal/__tests__/Modal.test.tsx +++ b/components/modal/__tests__/Modal.test.tsx @@ -192,4 +192,20 @@ describe('Modal', () => { expect(document.querySelector('.first-origin')).toMatchSnapshot(); expect(document.querySelector('.second-props-origin')).toMatchSnapshot(); }); + + it('responsive width', () => { + render( + , + ); + + const modalEle = document.querySelector('.ant-modal')!; + expect(modalEle).toHaveStyle({ + '--ant-modal-xs-width': '90%', + '--ant-modal-sm-width': '80%', + '--ant-modal-md-width': '70%', + '--ant-modal-lg-width': '60%', + '--ant-modal-xl-width': '50%', + '--ant-modal-xxl-width': '40%', + }); + }); }); diff --git a/components/modal/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/modal/__tests__/__snapshots__/demo-extend.test.ts.snap index f4a9d63ee1..0235718a76 100644 --- a/components/modal/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/modal/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -1228,14 +1228,26 @@ exports[`renders components/modal/demo/static-info.tsx extend context correctly exports[`renders components/modal/demo/static-info.tsx extend context correctly 2`] = `[]`; exports[`renders components/modal/demo/width.tsx extend context correctly 1`] = ` - + + + `; exports[`renders components/modal/demo/width.tsx extend context correctly 2`] = `[]`; diff --git a/components/modal/__tests__/__snapshots__/demo.test.tsx.snap b/components/modal/__tests__/__snapshots__/demo.test.tsx.snap index f2c84908be..17817d8707 100644 --- a/components/modal/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/modal/__tests__/__snapshots__/demo.test.tsx.snap @@ -1188,14 +1188,26 @@ exports[`renders components/modal/demo/static-info.tsx correctly 1`] = ` `; exports[`renders components/modal/demo/width.tsx correctly 1`] = ` - + + + `; exports[`renders components/modal/demo/wireframe.tsx correctly 1`] = ` diff --git a/components/modal/demo/width.tsx b/components/modal/demo/width.tsx index 9a353f98ee..f492e4194c 100644 --- a/components/modal/demo/width.tsx +++ b/components/modal/demo/width.tsx @@ -1,11 +1,13 @@ import React, { useState } from 'react'; -import { Button, Modal } from 'antd'; +import { Button, Flex, Modal } from 'antd'; const App: React.FC = () => { const [open, setOpen] = useState(false); + const [openResponsive, setOpenResponsive] = useState(false); return ( - <> + + {/* Basic */} @@ -21,7 +23,31 @@ const App: React.FC = () => {

some contents...

some contents...

- + + {/* Responsive */} + + setOpenResponsive(false)} + onCancel={() => setOpenResponsive(false)} + width={{ + xs: '90%', + sm: '80%', + md: '70%', + lg: '60%', + xl: '50%', + xxl: '40%', + }} + > +

some contents...

+

some contents...

+

some contents...

+
+ ); }; diff --git a/components/modal/index.en-US.md b/components/modal/index.en-US.md index b27d6e714f..bd04d5c6d5 100644 --- a/components/modal/index.en-US.md +++ b/components/modal/index.en-US.md @@ -72,7 +72,7 @@ Common props ref:[Common props](/docs/react/common-props) | loading | Show the skeleton | boolean | | 5.18.0 | | title | The modal dialog's title | ReactNode | - | | | open | Whether the modal dialog is visible or not | boolean | false | | -| width | Width of the modal dialog | string \| number | 520 | | +| width | Width of the modal dialog | string \| number \| [Breakpoint](/components/grid-cn#col) | 520 | Breakpoint: 5.23.0 | | wrapClassName | The class name of the container of the modal dialog | string | - | | | zIndex | The `z-index` of the Modal | number | 1000 | | | onCancel | Specify a function that will be called when a user clicks mask, close button on top right or Cancel button | function(e) | - | | diff --git a/components/modal/index.zh-CN.md b/components/modal/index.zh-CN.md index 4fbac6ecc6..7f2446217e 100644 --- a/components/modal/index.zh-CN.md +++ b/components/modal/index.zh-CN.md @@ -73,7 +73,7 @@ demo: | loading | 显示骨架屏 | boolean | | 5.18.0 | | title | 标题 | ReactNode | - | | | open | 对话框是否可见 | boolean | - | | -| width | 宽度 | string \| number | 520 | | +| width | 宽度 | string \| number \| [Breakpoint](/components/grid-cn#col) | 520 | Breakpoint: 5.23.0 | | wrapClassName | 对话框外层容器的类名 | string | - | | | zIndex | 设置 Modal 的 `z-index` | number | 1000 | | | onCancel | 点击遮罩层或右上角叉或取消按钮的回调 | function(e) | - | | diff --git a/components/modal/interface.ts b/components/modal/interface.ts index 6064820d41..c37268ca7b 100644 --- a/components/modal/interface.ts +++ b/components/modal/interface.ts @@ -1,10 +1,11 @@ import type React from 'react'; import type { DialogProps } from 'rc-dialog'; +import { Breakpoint } from '../_util/responsiveObserver'; import type { ButtonProps, LegacyButtonType } from '../button/button'; import type { DirectionType } from '../config-provider'; -interface ModalCommonProps extends Omit { +interface ModalCommonProps extends Omit { footer?: | React.ReactNode | (( @@ -30,7 +31,7 @@ export interface ModalProps extends ModalCommonProps { /** Centered Modal */ centered?: boolean; /** Width of the modal dialog */ - width?: string | number; + width?: string | number | Partial>; /** Text of the OK button */ okText?: React.ReactNode; /** Button `type` of the OK button */ diff --git a/components/modal/style/index.ts b/components/modal/style/index.ts index 1c37558a6b..602779d1dd 100644 --- a/components/modal/style/index.ts +++ b/components/modal/style/index.ts @@ -1,6 +1,7 @@ import type React from 'react'; import { unit } from '@ant-design/cssinjs'; +import { getMediaSize } from '../../grid/style'; import { genFocusStyle, resetComponent } from '../../style'; import { initFadeMotion, initZoomMotion } from '../../style/motion'; import type { @@ -386,6 +387,30 @@ const genRTLStyle: GenerateStyle = (token) => { }; }; +const genResponsiveWidthStyle: GenerateStyle = (token) => { + const { componentCls } = token; + + const gridMediaSizesMap: Record = getMediaSize(token); + delete gridMediaSizesMap.xs; + + const responsiveStyles = Object.keys(gridMediaSizesMap).map((key) => ({ + [`@media (min-width: ${unit(gridMediaSizesMap[key])})`]: { + width: `var(--${componentCls.replace('.', '')}-${key}-width)`, + }, + })); + + return { + [`${componentCls}-root`]: { + [componentCls]: [ + { + width: `var(--${componentCls.replace('.', '')}-xs-width)`, + }, + ...responsiveStyles, + ], + }, + }; +}; + // ============================== Export ============================== export const prepareToken: (token: Parameters>[0]) => ModalToken = (token) => { const headerPaddingVertical = token.padding; @@ -453,6 +478,7 @@ export default genStyleHooks( genRTLStyle(modalToken), genModalMaskStyle(modalToken), initZoomMotion(modalToken, 'zoom'), + genResponsiveWidthStyle(modalToken), ]; }, prepareComponentToken, diff --git a/components/popconfirm/__tests__/index.test.tsx b/components/popconfirm/__tests__/index.test.tsx index ff217efd02..0b5107a1ce 100644 --- a/components/popconfirm/__tests__/index.test.tsx +++ b/components/popconfirm/__tests__/index.test.tsx @@ -378,4 +378,33 @@ describe('Popconfirm', () => { expect(document.body.querySelectorAll('.ant-btn')[0].textContent).toBe('Cancel'); expect(document.body.querySelectorAll('.ant-btn')[1].textContent).toBe('OK'); }); + + it('should apply custom styles to Popconfirm', () => { + const customClassNames = { + body: 'custom-body', + root: 'custom-root', + }; + + const customStyles = { + body: { color: 'red' }, + root: { backgroundColor: 'blue' }, + }; + + const { container } = render( + + + , + ); + + const popconfirmElement = container.querySelector('.ant-popconfirm') as HTMLElement; + const popconfirmBodyElement = container.querySelector('.ant-popover-inner') as HTMLElement; + + // 验证 classNames + expect(popconfirmElement.classList).toContain('custom-root'); + expect(popconfirmBodyElement.classList).toContain('custom-body'); + + // 验证 styles + expect(popconfirmElement.style.backgroundColor).toBe('blue'); + expect(popconfirmBodyElement.style.color).toBe('red'); + }); }); diff --git a/components/popconfirm/demo/_semantic.tsx b/components/popconfirm/demo/_semantic.tsx new file mode 100644 index 0000000000..d56e2eb1fa --- /dev/null +++ b/components/popconfirm/demo/_semantic.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Popconfirm } from 'antd'; + +import SemanticPreview from '../../../.dumi/components/SemanticPreview'; +import useLocale from '../../../.dumi/hooks/useLocale'; + +const locales = { + cn: { + root: '根节点 (包含箭头、内容元素)', + body: '内容元素', + }, + en: { + root: 'Root element (including arrows, content elements)', + body: 'Body element', + }, +}; + +const BlockList: React.FC = (props: any) => { + const divRef = React.useRef(null); + + return ( +
+ divRef.current} + {...props} + /> +
+ ); +}; + +const App: React.FC = () => { + const [locale] = useLocale(locales); + return ( + + + + ); +}; + +export default App; diff --git a/components/popconfirm/index.en-US.md b/components/popconfirm/index.en-US.md index d03f2b1fa5..42e7ba04d5 100644 --- a/components/popconfirm/index.en-US.md +++ b/components/popconfirm/index.en-US.md @@ -53,6 +53,10 @@ Common props ref:[Common props](/docs/react/common-props) +## Semantic DOM + + + ## Design Token diff --git a/components/popconfirm/index.tsx b/components/popconfirm/index.tsx index fa53d36383..0f0bc32569 100644 --- a/components/popconfirm/index.tsx +++ b/components/popconfirm/index.tsx @@ -48,10 +48,13 @@ const InternalPopconfirm = React.forwardRef((props, overlayClassName, onOpenChange, onVisibleChange, + overlayStyle, + styles, + classNames: popconfirmClassNames, ...restProps } = props; - const { getPrefixCls } = React.useContext(ConfigContext); + const { getPrefixCls, popconfirm } = React.useContext(ConfigContext); const [open, setOpen] = useMergedState(false, { value: props.open ?? props.visible, defaultValue: props.defaultOpen ?? props.defaultVisible, @@ -83,7 +86,13 @@ const InternalPopconfirm = React.forwardRef((props, }; const prefixCls = getPrefixCls('popconfirm', customizePrefixCls); - const overlayClassNames = classNames(prefixCls, overlayClassName); + const rootClassNames = classNames( + prefixCls, + overlayClassName, + popconfirm?.classNames?.root, + popconfirmClassNames?.root, + ); + const bodyClassNames = classNames(popconfirm?.classNames?.body, popconfirmClassNames?.body); const [wrapCSSVar] = useStyle(prefixCls); @@ -95,7 +104,19 @@ const InternalPopconfirm = React.forwardRef((props, onOpenChange={onInternalOpenChange} open={open} ref={ref} - overlayClassName={overlayClassNames} + classNames={{ root: rootClassNames, body: bodyClassNames }} + styles={{ + root: { + ...popconfirm?.styles?.root, + ...popconfirm?.style, + ...overlayStyle, + ...styles?.root, + }, + body: { + ...popconfirm?.styles?.body, + ...styles?.body, + }, + }} content={ +## Semantic DOM + + + ## 主题变量(Design Token) diff --git a/components/popover/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/popover/__tests__/__snapshots__/demo-extend.test.ts.snap index b58dcb581e..7bf4407597 100644 --- a/components/popover/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/popover/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -5,8 +5,9 @@ Array [
Show @@ -33,12 +34,12 @@ Array [ >
Hide @@ -49,12 +50,12 @@ Array [ >
Center diff --git a/components/popover/__tests__/__snapshots__/demo.test.tsx.snap b/components/popover/__tests__/__snapshots__/demo.test.tsx.snap index 0404d1b67f..5156a56924 100644 --- a/components/popover/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/popover/__tests__/__snapshots__/demo.test.tsx.snap @@ -5,8 +5,9 @@ Array [
Show @@ -33,12 +34,12 @@ Array [ >
Hide @@ -49,12 +50,12 @@ Array [ >
Center diff --git a/components/popover/__tests__/index.test.tsx b/components/popover/__tests__/index.test.tsx index 2764ef002c..a5846bc279 100644 --- a/components/popover/__tests__/index.test.tsx +++ b/components/popover/__tests__/index.test.tsx @@ -137,4 +137,33 @@ describe('Popover', () => { expect(popup).toBe(null); }); }); + + it('should apply custom styles to Popover', () => { + const customClassNames = { + body: 'custom-body', + root: 'custom-root', + }; + + const customStyles = { + body: { color: 'red' }, + root: { backgroundColor: 'blue' }, + }; + + const { container } = render( + } styles={customStyles} open> + + , + ); + + const popoverElement = container.querySelector('.ant-popover') as HTMLElement; + const popoverBodyElement = container.querySelector('.ant-popover-inner') as HTMLElement; + + // 验证 classNames + expect(popoverElement.classList).toContain('custom-root'); + expect(popoverBodyElement.classList).toContain('custom-body'); + + // 验证 styles + expect(popoverElement.style.backgroundColor).toBe('blue'); + expect(popoverBodyElement.style.color).toBe('red'); + }); }); diff --git a/components/popover/demo/_semantic.tsx b/components/popover/demo/_semantic.tsx new file mode 100644 index 0000000000..18a3ed98cf --- /dev/null +++ b/components/popover/demo/_semantic.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Popover } from 'antd'; + +import SemanticPreview from '../../../.dumi/components/SemanticPreview'; +import useLocale from '../../../.dumi/hooks/useLocale'; + +const locales = { + cn: { + root: '根节点 (包含箭头、内容元素)', + body: '内容元素', + }, + en: { + root: 'Root element (including arrows, content elements)', + body: 'Body element', + }, +}; + +const BlockList: React.FC = (props: any) => { + const divRef = React.useRef(null); + + return ( +
+ divRef.current} + {...props} + /> +
+ ); +}; + +const App: React.FC = () => { + const [locale] = useLocale(locales); + return ( + + + + ); +}; + +export default App; diff --git a/components/popover/index.en-US.md b/components/popover/index.en-US.md index 6cdbce7bcb..176d551342 100644 --- a/components/popover/index.en-US.md +++ b/components/popover/index.en-US.md @@ -47,6 +47,10 @@ Common props ref:[Common props](/docs/react/common-props) Please ensure that the child node of `Popover` accepts `onMouseEnter`, `onMouseLeave`, `onFocus`, `onClick` events. +## Semantic DOM + + + ## Design Token diff --git a/components/popover/index.tsx b/components/popover/index.tsx index 9d9de31591..d3d279f1f1 100644 --- a/components/popover/index.tsx +++ b/components/popover/index.tsx @@ -36,15 +36,25 @@ const InternalPopover = React.forwardRef((props, ref) mouseLeaveDelay = 0.1, onOpenChange, overlayStyle = {}, + styles, + classNames: popoverClassNames, ...otherProps } = props; - const { getPrefixCls } = React.useContext(ConfigContext); + const { popover, getPrefixCls } = React.useContext(ConfigContext); const prefixCls = getPrefixCls('popover', customizePrefixCls); const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls); const rootPrefixCls = getPrefixCls(); - const overlayCls = classNames(overlayClassName, hashId, cssVarCls); + const rootClassNames = classNames( + overlayClassName, + hashId, + cssVarCls, + popover?.classNames?.root, + popoverClassNames?.root, + ); + const bodyClassNames = classNames(popover?.classNames?.body, popoverClassNames?.body); + const [open, setOpen] = useMergedState(false, { value: props.open ?? props.visible, defaultValue: props.defaultOpen ?? props.defaultVisible, @@ -77,10 +87,21 @@ const InternalPopover = React.forwardRef((props, ref) trigger={trigger} mouseEnterDelay={mouseEnterDelay} mouseLeaveDelay={mouseLeaveDelay} - overlayStyle={overlayStyle} {...otherProps} prefixCls={prefixCls} - overlayClassName={overlayCls} + classNames={{ root: rootClassNames, body: bodyClassNames }} + styles={{ + root: { + ...popover?.styles?.root, + ...popover?.style, + ...overlayStyle, + ...styles?.root, + }, + body: { + ...popover?.styles?.body, + ...styles?.body, + }, + }} ref={ref} open={open} onOpenChange={onInternalOpenChange} diff --git a/components/popover/index.zh-CN.md b/components/popover/index.zh-CN.md index 291c51bcc5..1400be912f 100644 --- a/components/popover/index.zh-CN.md +++ b/components/popover/index.zh-CN.md @@ -48,6 +48,10 @@ demo: 请确保 `Popover` 的子元素能接受 `onMouseEnter`、`onMouseLeave`、`onFocus`、`onClick` 事件。 +## Semantic DOM + + + ## 主题变量(Design Token) diff --git a/components/progress/progress.tsx b/components/progress/progress.tsx index 21908bde71..268aaf1e00 100644 --- a/components/progress/progress.tsx +++ b/components/progress/progress.tsx @@ -3,7 +3,7 @@ import CheckCircleFilled from '@ant-design/icons/CheckCircleFilled'; import CheckOutlined from '@ant-design/icons/CheckOutlined'; import CloseCircleFilled from '@ant-design/icons/CloseCircleFilled'; import CloseOutlined from '@ant-design/icons/CloseOutlined'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import classNames from 'classnames'; import omit from 'rc-util/lib/omit'; @@ -92,7 +92,7 @@ const Progress = React.forwardRef((props, ref) => typeof strokeColorNotArray === 'string' ? strokeColorNotArray : Object.values(strokeColorNotArray)[0]; - return new TinyColor(color).isLight(); + return new FastColor(color).isLight(); } return false; }, [strokeColor]); diff --git a/components/qr-code/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/qr-code/__tests__/__snapshots__/demo-extend.test.ts.snap index db44c8a9ee..f21535ec98 100644 --- a/components/qr-code/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/qr-code/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -389,7 +389,8 @@ exports[`renders components/qr-code/demo/download.tsx extend context correctly 1
canvas @@ -416,12 +417,12 @@ exports[`renders components/qr-code/demo/download.tsx extend context correctly 1 >
svg @@ -479,7 +480,8 @@ Array [
L @@ -506,12 +508,12 @@ Array [ >
M @@ -522,12 +524,12 @@ Array [ >
Q @@ -538,12 +540,12 @@ Array [ >
H @@ -732,7 +734,7 @@ exports[`renders components/qr-code/demo/type.tsx extend context correctly 1`] = /> diff --git a/components/qr-code/__tests__/__snapshots__/demo.test.ts.snap b/components/qr-code/__tests__/__snapshots__/demo.test.ts.snap index f3accc9587..e849374bba 100644 --- a/components/qr-code/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/qr-code/__tests__/__snapshots__/demo.test.ts.snap @@ -347,7 +347,8 @@ exports[`renders components/qr-code/demo/download.tsx correctly 1`] = `
canvas @@ -374,12 +375,12 @@ exports[`renders components/qr-code/demo/download.tsx correctly 1`] = ` >
svg @@ -435,7 +436,8 @@ Array [
L @@ -462,12 +464,12 @@ Array [ >
M @@ -478,12 +480,12 @@ Array [ >
Q @@ -494,12 +496,12 @@ Array [ >
H @@ -682,7 +684,7 @@ exports[`renders components/qr-code/demo/type.tsx correctly 1`] = ` /> diff --git a/components/qr-code/style/index.ts b/components/qr-code/style/index.ts index 8bc0a78a1b..5ce1ccae67 100644 --- a/components/qr-code/style/index.ts +++ b/components/qr-code/style/index.ts @@ -1,5 +1,5 @@ import { unit } from '@ant-design/cssinjs'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { resetComponent } from '../../style'; import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal'; @@ -80,7 +80,7 @@ const genQRCodeStyle: GenerateStyle = (token) => { }; export const prepareComponentToken: GetDefaultToken<'QRCode'> = (token) => ({ - QRCodeMaskBackgroundColor: new TinyColor(token.colorBgContainer).setAlpha(0.96).toRgbString(), + QRCodeMaskBackgroundColor: new FastColor(token.colorBgContainer).setA(0.96).toRgbString(), }); export default genStyleHooks<'QRCode'>( diff --git a/components/radio/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/radio/__tests__/__snapshots__/demo-extend.test.ts.snap index e57e46a5f9..66c9ed7385 100644 --- a/components/radio/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/radio/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -15,6 +15,7 @@ exports[`renders components/radio/demo/badge.tsx extend context correctly 1`] = > @@ -56,6 +57,7 @@ exports[`renders components/radio/demo/badge.tsx extend context correctly 1`] = > @@ -180,6 +182,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc @@ -199,6 +202,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -218,6 +222,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -237,6 +242,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -266,6 +272,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc checked="" class="ant-radio-button-input" disabled="" + name="test-id" type="radio" value="a" /> @@ -286,6 +293,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc @@ -306,6 +314,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc @@ -326,6 +335,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc @@ -354,6 +364,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc @@ -373,6 +384,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -392,6 +404,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -411,6 +424,7 @@ exports[`renders components/radio/demo/component-token.tsx extend context correc > @@ -596,6 +610,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -615,6 +630,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly > @@ -634,6 +650,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly > @@ -653,6 +670,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly > @@ -677,6 +695,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -697,6 +716,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -716,6 +736,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly > @@ -735,6 +756,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly > @@ -760,6 +782,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly checked="" class="ant-radio-button-input" disabled="" + name="test-id" type="radio" value="a" /> @@ -780,6 +803,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -800,6 +824,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -820,6 +845,7 @@ exports[`renders components/radio/demo/radiobutton.tsx extend context correctly @@ -853,6 +879,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr @@ -872,6 +899,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr > @@ -891,6 +919,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr > @@ -910,6 +939,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr > @@ -933,6 +963,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr > @@ -953,6 +984,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr @@ -973,6 +1005,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr @@ -992,6 +1025,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx extend context corr > @@ -1022,6 +1056,7 @@ exports[`renders components/radio/demo/radiogroup.tsx extend context correctly 1 @@ -1041,6 +1076,7 @@ exports[`renders components/radio/demo/radiogroup.tsx extend context correctly 1 > @@ -1060,6 +1096,7 @@ exports[`renders components/radio/demo/radiogroup.tsx extend context correctly 1 > @@ -1079,6 +1116,7 @@ exports[`renders components/radio/demo/radiogroup.tsx extend context correctly 1 > @@ -1111,6 +1149,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre @@ -1130,6 +1169,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1149,6 +1189,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1173,6 +1214,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre @@ -1192,6 +1234,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1211,6 +1254,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1234,6 +1278,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1254,6 +1299,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre @@ -1273,6 +1319,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx extend context corre > @@ -1309,6 +1356,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx extend context correc @@ -1332,6 +1380,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx extend context correc > @@ -1355,6 +1404,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx extend context correc > @@ -1378,6 +1428,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx extend context correc > @@ -1410,6 +1461,7 @@ Array [ @@ -1429,6 +1481,7 @@ Array [ > @@ -1448,6 +1501,7 @@ Array [ > @@ -1473,6 +1527,7 @@ Array [ @@ -1492,6 +1547,7 @@ Array [ > @@ -1512,6 +1568,7 @@ Array [ @@ -1538,6 +1595,7 @@ Array [ @@ -1557,6 +1615,7 @@ Array [ > @@ -1577,6 +1636,7 @@ Array [ > @@ -1603,6 +1663,7 @@ Array [ @@ -1622,6 +1683,7 @@ Array [ > @@ -1642,6 +1704,7 @@ Array [ @@ -1765,6 +1828,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` @@ -1784,6 +1848,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1803,6 +1868,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1822,6 +1888,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1846,6 +1913,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` @@ -1865,6 +1933,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1884,6 +1953,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1903,6 +1973,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1927,6 +1998,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` @@ -1946,6 +2018,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1965,6 +2038,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -1984,6 +2058,7 @@ exports[`renders components/radio/demo/size.tsx extend context correctly 1`] = ` > @@ -2015,6 +2090,7 @@ Array [ @@ -2034,6 +2110,7 @@ Array [ > @@ -2053,6 +2130,7 @@ Array [ > @@ -2072,6 +2150,7 @@ Array [ > @@ -2098,6 +2177,7 @@ Array [ checked="" class="ant-radio-input" disabled="" + name="test-id" type="radio" value="1" /> @@ -2118,6 +2198,7 @@ Array [ @@ -2138,6 +2219,7 @@ Array [ @@ -2158,6 +2240,7 @@ Array [ diff --git a/components/radio/__tests__/__snapshots__/demo.test.tsx.snap b/components/radio/__tests__/__snapshots__/demo.test.tsx.snap index 0af63668bb..737bfc7187 100644 --- a/components/radio/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/radio/__tests__/__snapshots__/demo.test.tsx.snap @@ -15,6 +15,7 @@ exports[`renders components/radio/demo/badge.tsx correctly 1`] = ` > @@ -56,6 +57,7 @@ exports[`renders components/radio/demo/badge.tsx correctly 1`] = ` > @@ -176,6 +178,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` @@ -195,6 +198,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -214,6 +218,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -233,6 +238,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -262,6 +268,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` checked="" class="ant-radio-button-input" disabled="" + name="test-id" type="radio" value="a" /> @@ -282,6 +289,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` @@ -302,6 +310,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` @@ -322,6 +331,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` @@ -350,6 +360,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` @@ -369,6 +380,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -388,6 +400,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -407,6 +420,7 @@ exports[`renders components/radio/demo/component-token.tsx correctly 1`] = ` > @@ -586,6 +600,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -605,6 +620,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` > @@ -624,6 +640,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` > @@ -643,6 +660,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` > @@ -667,6 +685,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -687,6 +706,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -706,6 +726,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` > @@ -725,6 +746,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` > @@ -750,6 +772,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` checked="" class="ant-radio-button-input" disabled="" + name="test-id" type="radio" value="a" /> @@ -770,6 +793,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -790,6 +814,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -810,6 +835,7 @@ exports[`renders components/radio/demo/radiobutton.tsx correctly 1`] = ` @@ -841,6 +867,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` @@ -860,6 +887,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` > @@ -879,6 +907,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` > @@ -898,6 +927,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` > @@ -921,6 +951,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` > @@ -941,6 +972,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` @@ -961,6 +993,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` @@ -980,6 +1013,7 @@ exports[`renders components/radio/demo/radiobutton-solid.tsx correctly 1`] = ` > @@ -1008,6 +1042,7 @@ exports[`renders components/radio/demo/radiogroup.tsx correctly 1`] = ` @@ -1027,6 +1062,7 @@ exports[`renders components/radio/demo/radiogroup.tsx correctly 1`] = ` > @@ -1046,6 +1082,7 @@ exports[`renders components/radio/demo/radiogroup.tsx correctly 1`] = ` > @@ -1065,6 +1102,7 @@ exports[`renders components/radio/demo/radiogroup.tsx correctly 1`] = ` > @@ -1095,6 +1133,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` @@ -1114,6 +1153,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1133,6 +1173,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1157,6 +1198,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` @@ -1176,6 +1218,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1195,6 +1238,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1218,6 +1262,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1238,6 +1283,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` @@ -1257,6 +1303,7 @@ exports[`renders components/radio/demo/radiogroup-block.tsx correctly 1`] = ` > @@ -1291,6 +1338,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx correctly 1`] = ` @@ -1314,6 +1362,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx correctly 1`] = ` > @@ -1337,6 +1386,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx correctly 1`] = ` > @@ -1360,6 +1410,7 @@ exports[`renders components/radio/demo/radiogroup-more.tsx correctly 1`] = ` > @@ -1390,6 +1441,7 @@ Array [ @@ -1409,6 +1461,7 @@ Array [ > @@ -1428,6 +1481,7 @@ Array [ > @@ -1453,6 +1507,7 @@ Array [ @@ -1472,6 +1527,7 @@ Array [ > @@ -1492,6 +1548,7 @@ Array [ @@ -1518,6 +1575,7 @@ Array [ @@ -1537,6 +1595,7 @@ Array [ > @@ -1557,6 +1616,7 @@ Array [ > @@ -1583,6 +1643,7 @@ Array [ @@ -1602,6 +1663,7 @@ Array [ > @@ -1622,6 +1684,7 @@ Array [ @@ -1741,6 +1804,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` @@ -1760,6 +1824,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1779,6 +1844,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1798,6 +1864,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1822,6 +1889,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` @@ -1841,6 +1909,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1860,6 +1929,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1879,6 +1949,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1903,6 +1974,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` @@ -1922,6 +1994,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1941,6 +2014,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1960,6 +2034,7 @@ exports[`renders components/radio/demo/size.tsx correctly 1`] = ` > @@ -1989,6 +2064,7 @@ Array [ @@ -2008,6 +2084,7 @@ Array [ > @@ -2027,6 +2104,7 @@ Array [ > @@ -2046,6 +2124,7 @@ Array [ > @@ -2072,6 +2151,7 @@ Array [ checked="" class="ant-radio-input" disabled="" + name="test-id" type="radio" value="1" /> @@ -2092,6 +2172,7 @@ Array [ @@ -2112,6 +2193,7 @@ Array [ @@ -2132,6 +2214,7 @@ Array [ diff --git a/components/radio/__tests__/__snapshots__/group.test.tsx.snap b/components/radio/__tests__/__snapshots__/group.test.tsx.snap index f6975f15fd..1b26b9c947 100644 --- a/components/radio/__tests__/__snapshots__/group.test.tsx.snap +++ b/components/radio/__tests__/__snapshots__/group.test.tsx.snap @@ -12,6 +12,7 @@ exports[`Radio Group passes prefixCls down to radio 1`] = ` > @@ -32,6 +33,7 @@ exports[`Radio Group passes prefixCls down to radio 1`] = ` > diff --git a/components/radio/__tests__/__snapshots__/radio-button.test.tsx.snap b/components/radio/__tests__/__snapshots__/radio-button.test.tsx.snap index 384f28e528..b472c87601 100644 --- a/components/radio/__tests__/__snapshots__/radio-button.test.tsx.snap +++ b/components/radio/__tests__/__snapshots__/radio-button.test.tsx.snap @@ -51,6 +51,7 @@ exports[`Radio Group passes prefixCls down to radio 1`] = ` > @@ -71,6 +72,7 @@ exports[`Radio Group passes prefixCls down to radio 1`] = ` > diff --git a/components/radio/group.tsx b/components/radio/group.tsx index c8c72f562e..f66ab52f22 100644 --- a/components/radio/group.tsx +++ b/components/radio/group.tsx @@ -15,10 +15,13 @@ import type { } from './interface'; import Radio from './radio'; import useStyle from './style'; +import useId from 'rc-util/lib/hooks/useId'; const RadioGroup = React.forwardRef((props, ref) => { const { getPrefixCls, direction } = React.useContext(ConfigContext); + const defaultName = useId(); + const { prefixCls: customizePrefixCls, className, @@ -31,7 +34,7 @@ const RadioGroup = React.forwardRef((props, ref style, id, optionType, - name, + name = defaultName, defaultValue, value: customizedValue, block = false, diff --git a/components/radio/index.en-US.md b/components/radio/index.en-US.md index 8a348ed5da..a688b2818f 100644 --- a/components/radio/index.en-US.md +++ b/components/radio/index.en-US.md @@ -56,7 +56,7 @@ Radio group can wrap a group of `Radio`。 | buttonStyle | The style type of radio button | `outline` \| `solid` | `outline` | | | defaultValue | Default selected value | any | - | | | disabled | Disable all radio buttons | boolean | false | | -| name | The `name` property of all `input[type="radio"]` children | string | - | | +| name | The `name` property of all `input[type="radio"]` children. If not set, it will fallback to a randomly generated name | string | - | | | options | Set children optional | string\[] \| number\[] \| Array<[CheckboxOptionType](#checkboxoptiontype)> | - | | | optionType | Set Radio optionType | `default` \| `button` | `default` | 4.4.0 | | size | The size of radio button style | `large` \| `middle` \| `small` | - | | diff --git a/components/radio/index.zh-CN.md b/components/radio/index.zh-CN.md index 74c1d1d22f..bd4e44a838 100644 --- a/components/radio/index.zh-CN.md +++ b/components/radio/index.zh-CN.md @@ -59,7 +59,7 @@ demo: | buttonStyle | RadioButton 的风格样式,目前有描边和填色两种风格 | `outline` \| `solid` | `outline` | | | | defaultValue | 默认选中的值 | any | - | | | | disabled | 禁选所有子单选器 | boolean | false | | | -| name | RadioGroup 下所有 `input[type="radio"]` 的 `name` 属性 | string | - | | | +| name | RadioGroup 下所有 `input[type="radio"]` 的 `name` 属性。若未设置,则将回退到随机生成的名称 | string | - | | | | options | 以配置形式设置子元素 | string\[] \| number\[] \| Array<[CheckboxOptionType](#checkboxoptiontype)> | - | | | | optionType | 用于设置 Radio `options` 类型 | `default` \| `button` | `default` | 4.4.0 | | | size | 大小,只对按钮样式生效 | `large` \| `middle` \| `small` | - | | | diff --git a/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap index 49c12e8a1c..80f643fe8e 100644 --- a/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -4,7 +4,8 @@ exports[`renders components/segmented/demo/basic.tsx extend context correctly 1`
Daily @@ -31,12 +32,12 @@ exports[`renders components/segmented/demo/basic.tsx extend context correctly 1` >
Weekly @@ -47,12 +48,12 @@ exports[`renders components/segmented/demo/basic.tsx extend context correctly 1` >
Monthly @@ -63,12 +64,12 @@ exports[`renders components/segmented/demo/basic.tsx extend context correctly 1` >
Quarterly @@ -79,12 +80,12 @@ exports[`renders components/segmented/demo/basic.tsx extend context correctly 1` >
Yearly @@ -100,7 +101,8 @@ exports[`renders components/segmented/demo/block.tsx extend context correctly 1`
123 @@ -127,12 +129,12 @@ exports[`renders components/segmented/demo/block.tsx extend context correctly 1` >
456 @@ -143,12 +145,12 @@ exports[`renders components/segmented/demo/block.tsx extend context correctly 1` >
longtext-longtext-longtext-longtext @@ -164,7 +166,8 @@ exports[`renders components/segmented/demo/componentToken.tsx extend context cor
Daily @@ -191,12 +194,12 @@ exports[`renders components/segmented/demo/componentToken.tsx extend context cor >
Weekly @@ -207,12 +210,12 @@ exports[`renders components/segmented/demo/componentToken.tsx extend context cor >
Monthly @@ -223,12 +226,12 @@ exports[`renders components/segmented/demo/componentToken.tsx extend context cor >
Quarterly @@ -239,12 +242,12 @@ exports[`renders components/segmented/demo/componentToken.tsx extend context cor >
Yearly @@ -260,7 +263,8 @@ exports[`renders components/segmented/demo/controlled.tsx extend context correct
Map @@ -287,12 +291,12 @@ exports[`renders components/segmented/demo/controlled.tsx extend context correct >
Transit @@ -303,12 +307,12 @@ exports[`renders components/segmented/demo/controlled.tsx extend context correct >
Satellite @@ -325,7 +329,8 @@ Array [
AND @@ -352,12 +357,12 @@ Array [ >
OR @@ -368,12 +373,12 @@ Array [ >
NOT @@ -385,7 +390,8 @@ Array [
AND @@ -412,12 +418,12 @@ Array [ >
OR @@ -428,12 +434,12 @@ Array [ >
NOT @@ -453,7 +459,8 @@ exports[`renders components/segmented/demo/custom.tsx extend context correctly 1
Map @@ -714,12 +722,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly
Transit @@ -731,12 +739,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly
Satellite @@ -747,7 +755,8 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly
Daily @@ -775,12 +784,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly
Weekly @@ -791,12 +800,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly >
Monthly @@ -808,12 +817,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly
Quarterly @@ -824,12 +833,12 @@ exports[`renders components/segmented/demo/disabled.tsx extend context correctly >
Yearly @@ -849,7 +858,8 @@ exports[`renders components/segmented/demo/dynamic.tsx extend context correctly
Daily @@ -876,12 +886,12 @@ exports[`renders components/segmented/demo/dynamic.tsx extend context correctly >
Weekly @@ -892,12 +902,12 @@ exports[`renders components/segmented/demo/dynamic.tsx extend context correctly >
Monthly @@ -922,7 +932,8 @@ exports[`renders components/segmented/demo/icon-only.tsx extend context correctl
Daily @@ -1042,12 +1054,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Weekly @@ -1058,12 +1070,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Monthly @@ -1074,12 +1086,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Quarterly @@ -1090,12 +1102,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Yearly @@ -1106,7 +1118,8 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`]
Daily @@ -1133,12 +1146,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Weekly @@ -1149,12 +1162,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Monthly @@ -1165,12 +1178,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Quarterly @@ -1181,12 +1194,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Yearly @@ -1197,7 +1210,8 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`]
Daily @@ -1224,12 +1238,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Weekly @@ -1240,12 +1254,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Monthly @@ -1256,12 +1270,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Quarterly @@ -1272,12 +1286,12 @@ exports[`renders components/segmented/demo/size.tsx extend context correctly 1`] >
Yearly @@ -1298,8 +1312,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co
Daily @@ -1326,12 +1341,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Weekly @@ -1342,12 +1357,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Monthly @@ -1368,8 +1383,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co
Daily @@ -1396,12 +1412,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Weekly @@ -1412,12 +1428,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Monthly @@ -1437,8 +1453,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co
Daily @@ -1465,12 +1482,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Weekly @@ -1481,12 +1498,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx extend context co >
Monthly @@ -1624,7 +1641,8 @@ exports[`renders components/segmented/demo/vertical.tsx extend context correctly
+
+ + + + + +
+
+`; + +exports[`renders components/segmented/demo/with-name.tsx extend context correctly 2`] = `[]`; diff --git a/components/segmented/__tests__/__snapshots__/demo.test.ts.snap b/components/segmented/__tests__/__snapshots__/demo.test.ts.snap index 9e24cc69c7..2c3f156683 100644 --- a/components/segmented/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/segmented/__tests__/__snapshots__/demo.test.ts.snap @@ -4,7 +4,8 @@ exports[`renders components/segmented/demo/basic.tsx correctly 1`] = `
Daily @@ -31,12 +32,12 @@ exports[`renders components/segmented/demo/basic.tsx correctly 1`] = ` >
Weekly @@ -47,12 +48,12 @@ exports[`renders components/segmented/demo/basic.tsx correctly 1`] = ` >
Monthly @@ -63,12 +64,12 @@ exports[`renders components/segmented/demo/basic.tsx correctly 1`] = ` >
Quarterly @@ -79,12 +80,12 @@ exports[`renders components/segmented/demo/basic.tsx correctly 1`] = ` >
Yearly @@ -98,7 +99,8 @@ exports[`renders components/segmented/demo/block.tsx correctly 1`] = `
123 @@ -125,12 +127,12 @@ exports[`renders components/segmented/demo/block.tsx correctly 1`] = ` >
456 @@ -141,12 +143,12 @@ exports[`renders components/segmented/demo/block.tsx correctly 1`] = ` >
longtext-longtext-longtext-longtext @@ -160,7 +162,8 @@ exports[`renders components/segmented/demo/componentToken.tsx correctly 1`] = `
Daily @@ -187,12 +190,12 @@ exports[`renders components/segmented/demo/componentToken.tsx correctly 1`] = ` >
Weekly @@ -203,12 +206,12 @@ exports[`renders components/segmented/demo/componentToken.tsx correctly 1`] = ` >
Monthly @@ -219,12 +222,12 @@ exports[`renders components/segmented/demo/componentToken.tsx correctly 1`] = ` >
Quarterly @@ -235,12 +238,12 @@ exports[`renders components/segmented/demo/componentToken.tsx correctly 1`] = ` >
Yearly @@ -254,7 +257,8 @@ exports[`renders components/segmented/demo/controlled.tsx correctly 1`] = `
Map @@ -281,12 +285,12 @@ exports[`renders components/segmented/demo/controlled.tsx correctly 1`] = ` >
Transit @@ -297,12 +301,12 @@ exports[`renders components/segmented/demo/controlled.tsx correctly 1`] = ` >
Satellite @@ -317,7 +321,8 @@ Array [
AND @@ -344,12 +349,12 @@ Array [ >
OR @@ -360,12 +365,12 @@ Array [ >
NOT @@ -377,7 +382,8 @@ Array [
AND @@ -404,12 +410,12 @@ Array [ >
OR @@ -420,12 +426,12 @@ Array [ >
NOT @@ -443,7 +449,8 @@ exports[`renders components/segmented/demo/custom.tsx correctly 1`] = `
Map @@ -702,12 +710,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = `
Transit @@ -719,12 +727,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = `
Satellite @@ -735,7 +743,8 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = `
Daily @@ -763,12 +772,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = `
Weekly @@ -779,12 +788,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = ` >
Monthly @@ -796,12 +805,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = `
Quarterly @@ -812,12 +821,12 @@ exports[`renders components/segmented/demo/disabled.tsx correctly 1`] = ` >
Yearly @@ -835,7 +844,8 @@ exports[`renders components/segmented/demo/dynamic.tsx correctly 1`] = `
Daily @@ -862,12 +872,12 @@ exports[`renders components/segmented/demo/dynamic.tsx correctly 1`] = ` >
Weekly @@ -878,12 +888,12 @@ exports[`renders components/segmented/demo/dynamic.tsx correctly 1`] = ` >
Monthly @@ -906,7 +916,8 @@ exports[`renders components/segmented/demo/icon-only.tsx correctly 1`] = `
Daily @@ -1024,12 +1036,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Weekly @@ -1040,12 +1052,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Monthly @@ -1056,12 +1068,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Quarterly @@ -1072,12 +1084,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Yearly @@ -1088,7 +1100,8 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = `
Daily @@ -1115,12 +1128,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Weekly @@ -1131,12 +1144,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Monthly @@ -1147,12 +1160,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Quarterly @@ -1163,12 +1176,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Yearly @@ -1179,7 +1192,8 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = `
Daily @@ -1206,12 +1220,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Weekly @@ -1222,12 +1236,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Monthly @@ -1238,12 +1252,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Quarterly @@ -1254,12 +1268,12 @@ exports[`renders components/segmented/demo/size.tsx correctly 1`] = ` >
Yearly @@ -1278,8 +1292,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = `
Daily @@ -1306,12 +1321,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Weekly @@ -1322,12 +1337,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Monthly @@ -1348,8 +1363,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = `
Daily @@ -1376,12 +1392,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Weekly @@ -1392,12 +1408,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Monthly @@ -1417,8 +1433,9 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = `
Daily @@ -1445,12 +1462,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Weekly @@ -1461,12 +1478,12 @@ exports[`renders components/segmented/demo/size-consistent.tsx correctly 1`] = ` >
Monthly @@ -1546,7 +1563,8 @@ exports[`renders components/segmented/demo/vertical.tsx correctly 1`] = `
`; + +exports[`renders components/segmented/demo/with-name.tsx correctly 1`] = ` +
+
+ + + + + +
+
+`; diff --git a/components/segmented/__tests__/__snapshots__/index.test.tsx.snap b/components/segmented/__tests__/__snapshots__/index.test.tsx.snap index 4e55403f85..7f22d6664c 100644 --- a/components/segmented/__tests__/__snapshots__/index.test.tsx.snap +++ b/components/segmented/__tests__/__snapshots__/index.test.tsx.snap @@ -4,7 +4,8 @@ exports[`Segmented render empty segmented 1`] = `
Daily @@ -43,12 +45,12 @@ exports[`Segmented render label with ReactNode 1`] = ` >
Daily @@ -111,12 +114,12 @@ exports[`Segmented render segmented ok 1`] = ` >
Weekly @@ -127,12 +130,12 @@ exports[`Segmented render segmented ok 1`] = ` >
Monthly @@ -146,7 +149,8 @@ exports[`Segmented render segmented with \`block\` 1`] = `
Daily @@ -173,12 +177,12 @@ exports[`Segmented render segmented with \`block\` 1`] = ` >
Weekly @@ -189,12 +193,12 @@ exports[`Segmented render segmented with \`block\` 1`] = ` >
Monthly @@ -208,7 +212,8 @@ exports[`Segmented render segmented with \`size#large\` 1`] = `
Daily @@ -235,12 +240,12 @@ exports[`Segmented render segmented with \`size#large\` 1`] = ` >
Weekly @@ -251,12 +256,12 @@ exports[`Segmented render segmented with \`size#large\` 1`] = ` >
Monthly @@ -270,7 +275,8 @@ exports[`Segmented render segmented with \`size#small\` 1`] = `
Daily @@ -297,12 +303,12 @@ exports[`Segmented render segmented with \`size#small\` 1`] = ` >
Weekly @@ -313,12 +319,12 @@ exports[`Segmented render segmented with \`size#small\` 1`] = ` >
Monthly @@ -332,7 +338,8 @@ exports[`Segmented render segmented with mixed options 1`] = `
Daily @@ -359,12 +366,12 @@ exports[`Segmented render segmented with mixed options 1`] = ` >
Weekly @@ -375,12 +382,12 @@ exports[`Segmented render segmented with mixed options 1`] = ` >
Monthly @@ -394,7 +401,8 @@ exports[`Segmented render segmented with numeric options 1`] = `
1 @@ -421,12 +429,12 @@ exports[`Segmented render segmented with numeric options 1`] = ` >
2 @@ -437,12 +445,12 @@ exports[`Segmented render segmented with numeric options 1`] = ` >
3 @@ -453,12 +461,12 @@ exports[`Segmented render segmented with numeric options 1`] = ` >
4 @@ -469,12 +477,12 @@ exports[`Segmented render segmented with numeric options 1`] = ` >
5 @@ -488,7 +496,7 @@ exports[`Segmented render segmented with options null/undefined 1`] = `
@@ -296,6 +298,7 @@ exports[`renders components/tabs/demo/card.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-card" >
@@ -327,7 +330,7 @@ exports[`renders components/tabs/demo/card.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -340,7 +343,7 @@ exports[`renders components/tabs/demo/card.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -413,6 +416,7 @@ exports[`renders components/tabs/demo/card-top.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-card" >
@@ -444,7 +448,7 @@ exports[`renders components/tabs/demo/card-top.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab Title 2
@@ -457,7 +461,7 @@ exports[`renders components/tabs/demo/card-top.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab Title 3
@@ -542,6 +546,7 @@ exports[`renders components/tabs/demo/centered.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-centered" >
@@ -573,7 +578,7 @@ exports[`renders components/tabs/demo/centered.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -586,7 +591,7 @@ exports[`renders components/tabs/demo/centered.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -658,6 +663,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -689,7 +695,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -702,7 +708,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -782,6 +788,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -813,7 +820,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -826,7 +833,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -906,6 +913,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -937,7 +945,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -950,7 +958,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -1030,6 +1038,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -1061,7 +1070,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -1074,7 +1083,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -1153,6 +1162,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-card ant-tabs-centered" >
@@ -1186,7 +1196,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -1266,6 +1276,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-small ant-tabs-card ant-tabs-centered" >
@@ -1299,7 +1310,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -1379,6 +1390,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-large ant-tabs-card ant-tabs-centered" >
@@ -1412,7 +1424,7 @@ exports[`renders components/tabs/demo/component-token.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -1509,6 +1521,7 @@ exports[`renders components/tabs/demo/custom-add-trigger.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-editable ant-tabs-card ant-tabs-editable-card" >
@@ -1567,14 +1580,14 @@ exports[`renders components/tabs/demo/custom-add-trigger.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -2433,6 +2452,7 @@ Array [ class="ant-tabs ant-tabs-top" >
@@ -2464,7 +2484,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -2477,7 +2497,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -2612,6 +2632,7 @@ Array [ class="ant-tabs ant-tabs-top" >
@@ -2655,7 +2676,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -2668,7 +2689,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -2751,6 +2772,7 @@ exports[`renders components/tabs/demo/icon.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top" >
@@ -2769,7 +2791,7 @@ exports[`renders components/tabs/demo/icon.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" >
@@ -3178,7 +3201,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -3241,6 +3264,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` style="height:300px" >
@@ -3259,7 +3283,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 0
@@ -3285,7 +3309,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -3298,7 +3322,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -3311,7 +3335,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 4
@@ -3324,7 +3348,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 5
@@ -3337,7 +3361,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 6
@@ -3350,7 +3374,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 7
@@ -3363,7 +3387,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 8
@@ -3376,7 +3400,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 9
@@ -3389,7 +3413,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 10
@@ -3402,7 +3426,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 11
@@ -3415,7 +3439,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 12
@@ -3428,7 +3452,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 13
@@ -3441,7 +3465,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 14
@@ -3454,7 +3478,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 15
@@ -3467,7 +3491,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 16
@@ -3480,7 +3504,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 17
@@ -3493,7 +3517,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 18
@@ -3506,7 +3530,7 @@ exports[`renders components/tabs/demo/nest.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 19
@@ -3601,6 +3625,7 @@ Array [ > @@ -3620,6 +3645,7 @@ Array [ > @@ -3640,6 +3666,7 @@ Array [ @@ -3659,6 +3686,7 @@ Array [ > @@ -3677,6 +3705,7 @@ Array [ class="ant-tabs ant-tabs-left" >
@@ -3708,7 +3737,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -3721,7 +3750,7 @@ Array [ aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -3802,6 +3831,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` @@ -3821,6 +3851,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` > @@ -3840,6 +3871,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` > @@ -3857,6 +3889,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -3888,7 +3921,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -3901,7 +3934,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 3
@@ -3969,6 +4002,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` style="margin-bottom:32px" >
@@ -4000,7 +4034,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Card Tab 2
@@ -4013,7 +4047,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Card Tab 3
@@ -4080,6 +4114,7 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` class="ant-tabs ant-tabs-top ant-tabs-editable ant-tabs-small ant-tabs-card ant-tabs-editable-card" >
@@ -4138,14 +4173,14 @@ exports[`renders components/tabs/demo/size.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab 2
@@ -4439,7 +4477,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-3
@@ -4453,7 +4491,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-4
@@ -4467,7 +4505,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-5
@@ -4481,7 +4519,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-6
@@ -4495,7 +4533,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-7
@@ -4509,7 +4547,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-8
@@ -4523,7 +4561,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-9
@@ -4537,7 +4575,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-10
@@ -4551,7 +4589,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-11
@@ -4565,7 +4603,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-12
@@ -4579,7 +4617,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-13
@@ -4593,7 +4631,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-14
@@ -4607,7 +4645,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-15
@@ -4621,7 +4659,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-16
@@ -4635,7 +4673,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-17
@@ -4649,7 +4687,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-18
@@ -4663,7 +4701,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-19
@@ -4677,7 +4715,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-20
@@ -4691,7 +4729,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-21
@@ -4705,7 +4743,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-22
@@ -4719,7 +4757,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-23
@@ -4733,7 +4771,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-24
@@ -4747,7 +4785,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-25
@@ -4761,7 +4799,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-26
@@ -4775,7 +4813,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-27
@@ -4802,7 +4840,7 @@ exports[`renders components/tabs/demo/slide.tsx correctly 1`] = ` aria-selected="false" class="ant-tabs-tab-btn" role="tab" - tabindex="0" + tabindex="-1" > Tab-29
diff --git a/components/tabs/__tests__/__snapshots__/index.test.tsx.snap b/components/tabs/__tests__/__snapshots__/index.test.tsx.snap index 5610da2e8e..afe523590d 100644 --- a/components/tabs/__tests__/__snapshots__/index.test.tsx.snap +++ b/components/tabs/__tests__/__snapshots__/index.test.tsx.snap @@ -33,6 +33,7 @@ exports[`Tabs rtl render component should be rendered correctly in RTL direction class="ant-tabs ant-tabs-top ant-tabs-rtl" >
@@ -123,6 +124,7 @@ exports[`Tabs tabBarGutter should work 1`] = ` class="ant-tabs ant-tabs-top" >
@@ -255,6 +257,7 @@ exports[`Tabs tabBarGutter should work 2`] = ` class="ant-tabs ant-tabs-left" >
@@ -387,6 +390,7 @@ exports[`Tabs tabPosition remove card 1`] = ` class="ant-tabs ant-tabs-left" >
diff --git a/components/tabs/style/index.ts b/components/tabs/style/index.ts index 7ad2af0414..0f120de1fa 100644 --- a/components/tabs/style/index.ts +++ b/components/tabs/style/index.ts @@ -1,7 +1,7 @@ import { unit } from '@ant-design/cssinjs'; import type { CSSObject } from '@ant-design/cssinjs'; -import { genFocusStyle, resetComponent, textEllipsis } from '../../style'; +import { genFocusOutline, genFocusStyle, resetComponent, textEllipsis } from '../../style'; import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal'; import { genStyleHooks, mergeToken } from '../../theme/internal'; import genMotionStyle from './motion'; @@ -165,9 +165,17 @@ const genCardStyle: GenerateStyle = (token: TabsToken): CSSObject => background: token.colorBgContainer, }, + [`${componentCls}-tab-focus`]: { + ...genFocusOutline(token, -3), + }, + [`${componentCls}-ink-bar`]: { visibility: 'hidden', }, + + [`& ${componentCls}-tab${componentCls}-tab-focus ${componentCls}-tab-btn`]: { + outline: 'none', + }, }, // ========================== Top & Bottom ========================== @@ -687,7 +695,6 @@ const genTabStyle: GenerateStyle = (token: TabsToken) => { '&:focus:not(:focus-visible), &:active': { color: itemActiveColor, }, - ...genFocusStyle(token), }, '&-btn': { outline: 'none', @@ -716,6 +723,7 @@ const genTabStyle: GenerateStyle = (token: TabsToken) => { '&:hover': { color: token.colorTextHeading, }, + ...genFocusStyle(token), }, '&:hover': { color: itemHoverColor, @@ -726,6 +734,10 @@ const genTabStyle: GenerateStyle = (token: TabsToken) => { textShadow: token.tabsActiveTextShadow, }, + [`&${tabCls}-focus ${tabCls}-btn`]: { + ...genFocusOutline(token), + }, + [`&${tabCls}-disabled`]: { color: token.colorTextDisabled, cursor: 'not-allowed', @@ -961,7 +973,7 @@ const genTabsStyle: GenerateStyle = (token: TabsToken): CSSObject => color: itemActiveColor, }, - ...genFocusStyle(token), + ...genFocusStyle(token, -3), }, }, @@ -992,7 +1004,7 @@ const genTabsStyle: GenerateStyle = (token: TabsToken): CSSObject => }, [`${componentCls}-tabpane`]: { - outline: 'none', + ...genFocusStyle(token), '&-hidden': { display: 'none', }, diff --git a/components/tag/style/index.ts b/components/tag/style/index.ts index 11f169e73f..6d6b57664d 100644 --- a/components/tag/style/index.ts +++ b/components/tag/style/index.ts @@ -1,7 +1,7 @@ import type React from 'react'; import { unit } from '@ant-design/cssinjs'; import type { CSSInterpolation } from '@ant-design/cssinjs'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { resetComponent } from '../../style'; import type { FullToken, GetDefaultToken, GenStyleFn } from '../../theme/internal'; @@ -140,7 +140,7 @@ export const prepareToken: (token: Parameters>[0]) => TagToken }; export const prepareComponentToken: GetDefaultToken<'Tag'> = (token) => ({ - defaultBg: new TinyColor(token.colorFillQuaternary) + defaultBg: new FastColor(token.colorFillQuaternary) .onBackground(token.colorBgContainer) .toHexString(), defaultColor: token.colorText, diff --git a/components/theme/themes/dark/colorAlgorithm.ts b/components/theme/themes/dark/colorAlgorithm.ts index cf395bc0ab..c88c22ebb3 100644 --- a/components/theme/themes/dark/colorAlgorithm.ts +++ b/components/theme/themes/dark/colorAlgorithm.ts @@ -1,9 +1,9 @@ -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; export const getAlphaColor = (baseColor: string, alpha: number) => - new TinyColor(baseColor).setAlpha(alpha).toRgbString(); + new FastColor(baseColor).setA(alpha).toRgbString(); export const getSolidColor = (baseColor: string, brightness: number) => { - const instance = new TinyColor(baseColor); + const instance = new FastColor(baseColor); return instance.lighten(brightness).toHexString(); }; diff --git a/components/theme/themes/default/colorAlgorithm.ts b/components/theme/themes/default/colorAlgorithm.ts index 5ab75e6b1f..043d007312 100644 --- a/components/theme/themes/default/colorAlgorithm.ts +++ b/components/theme/themes/default/colorAlgorithm.ts @@ -1,9 +1,9 @@ -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; export const getAlphaColor = (baseColor: string, alpha: number) => - new TinyColor(baseColor).setAlpha(alpha).toRgbString(); + new FastColor(baseColor).setA(alpha).toRgbString(); export const getSolidColor = (baseColor: string, brightness: number) => { - const instance = new TinyColor(baseColor); + const instance = new FastColor(baseColor); return instance.darken(brightness).toHexString(); }; diff --git a/components/theme/themes/shared/genColorMapToken.ts b/components/theme/themes/shared/genColorMapToken.ts index 955980dcdf..bfc96efb3a 100644 --- a/components/theme/themes/shared/genColorMapToken.ts +++ b/components/theme/themes/shared/genColorMapToken.ts @@ -1,4 +1,4 @@ -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import type { ColorMapToken, SeedToken } from '../../interface'; import type { GenerateColorMap, GenerateNeutralColorMap } from '../ColorMap'; @@ -33,8 +33,8 @@ export default function genColorMapToken( const colorLink = seed.colorLink || seed.colorInfo; const linkColors = generateColorPalettes(colorLink); - const colorErrorBgFilledHover = new TinyColor(errorColors[1]) - .mix(new TinyColor(errorColors[3]), 50) + const colorErrorBgFilledHover = new FastColor(errorColors[1]) + .mix(new FastColor(errorColors[3]), 50) .toHexString(); return { @@ -101,7 +101,7 @@ export default function genColorMapToken( colorLink: linkColors[6], colorLinkActive: linkColors[7], - colorBgMask: new TinyColor('#000').setAlpha(0.45).toRgbString(), + colorBgMask: new FastColor('#000').setA(0.45).toRgbString(), colorWhite: '#fff', }; } diff --git a/components/theme/util/alias.ts b/components/theme/util/alias.ts index 90f72f87e3..32d48e92ca 100644 --- a/components/theme/util/alias.ts +++ b/components/theme/util/alias.ts @@ -1,4 +1,4 @@ -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import type { AliasToken, MapToken, OverrideToken, SeedToken } from '../interface'; import seedToken from '../themes/seed'; @@ -167,9 +167,9 @@ export default function formatToken(derivativeToken: RawMergedToken): AliasToken boxShadowPopoverArrow: '2px 2px 5px rgba(0, 0, 0, 0.05)', boxShadowCard: ` - 0 1px 2px -2px ${new TinyColor('rgba(0, 0, 0, 0.16)').toRgbString()}, - 0 3px 6px 0 ${new TinyColor('rgba(0, 0, 0, 0.12)').toRgbString()}, - 0 5px 12px 4px ${new TinyColor('rgba(0, 0, 0, 0.09)').toRgbString()} + 0 1px 2px -2px ${new FastColor('rgba(0, 0, 0, 0.16)').toRgbString()}, + 0 3px 6px 0 ${new FastColor('rgba(0, 0, 0, 0.12)').toRgbString()}, + 0 5px 12px 4px ${new FastColor('rgba(0, 0, 0, 0.09)').toRgbString()} `, boxShadowDrawerRight: ` -6px 0 16px 0 rgba(0, 0, 0, 0.08), diff --git a/components/theme/util/getAlphaColor.ts b/components/theme/util/getAlphaColor.ts index 7cd1d3fdbb..5333877ae1 100644 --- a/components/theme/util/getAlphaColor.ts +++ b/components/theme/util/getAlphaColor.ts @@ -1,29 +1,29 @@ -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; function isStableColor(color: number): boolean { return color >= 0 && color <= 255; } function getAlphaColor(frontColor: string, backgroundColor: string): string { - const { r: fR, g: fG, b: fB, a: originAlpha } = new TinyColor(frontColor).toRgb(); + const { r: fR, g: fG, b: fB, a: originAlpha } = new FastColor(frontColor).toRgb(); if (originAlpha < 1) { return frontColor; } - const { r: bR, g: bG, b: bB } = new TinyColor(backgroundColor).toRgb(); + const { r: bR, g: bG, b: bB } = new FastColor(backgroundColor).toRgb(); for (let fA = 0.01; fA <= 1; fA += 0.01) { const r = Math.round((fR - bR * (1 - fA)) / fA); const g = Math.round((fG - bG * (1 - fA)) / fA); const b = Math.round((fB - bB * (1 - fA)) / fA); if (isStableColor(r) && isStableColor(g) && isStableColor(b)) { - return new TinyColor({ r, g, b, a: Math.round(fA * 100) / 100 }).toRgbString(); + return new FastColor({ r, g, b, a: Math.round(fA * 100) / 100 }).toRgbString(); } } // fallback /* istanbul ignore next */ - return new TinyColor({ r: fR, g: fG, b: fB, a: 1 }).toRgbString(); + return new FastColor({ r: fR, g: fG, b: fB, a: 1 }).toRgbString(); } export default getAlphaColor; diff --git a/components/timeline/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/timeline/__tests__/__snapshots__/demo-extend.test.ts.snap index d795481cc1..cf09a4b560 100644 --- a/components/timeline/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/timeline/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -561,6 +561,7 @@ Array [ @@ -580,6 +581,7 @@ Array [ > @@ -599,6 +601,7 @@ Array [ > diff --git a/components/timeline/__tests__/__snapshots__/demo.test.ts.snap b/components/timeline/__tests__/__snapshots__/demo.test.ts.snap index b93bb135f4..0e48dccf76 100644 --- a/components/timeline/__tests__/__snapshots__/demo.test.ts.snap +++ b/components/timeline/__tests__/__snapshots__/demo.test.ts.snap @@ -551,6 +551,7 @@ Array [ @@ -570,6 +571,7 @@ Array [ > @@ -589,6 +591,7 @@ Array [ > diff --git a/components/tooltip/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/tooltip/__tests__/__snapshots__/demo-extend.test.ts.snap index 51016ed388..92227c5832 100644 --- a/components/tooltip/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/tooltip/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -5,8 +5,9 @@ Array [
Show @@ -33,12 +34,12 @@ Array [ >
Hide @@ -49,12 +50,12 @@ Array [ >
Center diff --git a/components/tooltip/__tests__/__snapshots__/demo.test.tsx.snap b/components/tooltip/__tests__/__snapshots__/demo.test.tsx.snap index 4f9b7c8a3a..ef1ec35bfb 100644 --- a/components/tooltip/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/tooltip/__tests__/__snapshots__/demo.test.tsx.snap @@ -5,8 +5,9 @@ Array [
Show @@ -33,12 +34,12 @@ Array [ >
Hide @@ -49,12 +50,12 @@ Array [ >
Center diff --git a/components/tooltip/__tests__/tooltip.test.tsx b/components/tooltip/__tests__/tooltip.test.tsx index 39523c16b9..2143203902 100644 --- a/components/tooltip/__tests__/tooltip.test.tsx +++ b/components/tooltip/__tests__/tooltip.test.tsx @@ -215,7 +215,7 @@ describe('Tooltip', () => { mouseLeaveDelay={0} placement="bottomLeft" arrowPointAtCenter - overlayClassName="point-center-element" + classNames={{ root: 'point-center-element' }} > , @@ -232,7 +232,7 @@ describe('Tooltip', () => { mouseLeaveDelay={0} placement="bottomLeft" arrow={{ arrowPointAtCenter: true }} - overlayClassName="point-center-element" + classNames={{ root: 'point-center-element' }} > , @@ -402,9 +402,9 @@ describe('Tooltip', () => { expect(document.querySelector('.ant-tooltip')).not.toBeNull(); }); - it('should pass overlayInnerStyle through to the inner component', () => { + it('should pass styles={{ body: {} }} through to the inner component', () => { const { container } = render( - +
, ); @@ -601,4 +601,33 @@ describe('Tooltip', () => { expect(error).toHaveBeenCalled(); error.mockRestore(); }); + + it('should apply custom styles to Tooltip', () => { + const customClassNames = { + body: 'custom-body', + root: 'custom-root', + }; + + const customStyles = { + body: { color: 'red' }, + root: { backgroundColor: 'blue' }, + }; + + const { container } = render( + } styles={customStyles} visible> + + , + ); + + const tooltipElement = container.querySelector('.ant-tooltip') as HTMLElement; + const tooltipBodyElement = container.querySelector('.ant-tooltip-inner') as HTMLElement; + + // 验证 classNames + expect(tooltipElement.classList).toContain('custom-root'); + expect(tooltipBodyElement.classList).toContain('custom-body'); + + // 验证 styles + expect(tooltipElement.style.backgroundColor).toBe('blue'); + expect(tooltipBodyElement.style.color).toBe('red'); + }); }); diff --git a/components/tooltip/demo/_semantic.tsx b/components/tooltip/demo/_semantic.tsx new file mode 100644 index 0000000000..bcf321e703 --- /dev/null +++ b/components/tooltip/demo/_semantic.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Tooltip } from 'antd'; + +import SemanticPreview from '../../../.dumi/components/SemanticPreview'; +import useLocale from '../../../.dumi/hooks/useLocale'; + +const locales = { + cn: { + root: '根节点 (包含箭头、内容元素)', + body: '内容元素', + }, + en: { + root: 'Root element (including arrows, content elements)', + body: 'Body element', + }, +}; + +const BlockList: React.FC = (props: any) => { + const divRef = React.useRef(null); + + return ( +
+ divRef.current} + {...props} + /> +
+ ); +}; + +const App: React.FC = () => { + const [locale] = useLocale(locales); + return ( + + + + ); +}; + +export default App; diff --git a/components/tooltip/index.en-US.md b/components/tooltip/index.en-US.md index 7637dcdc12..40b4ff75ed 100644 --- a/components/tooltip/index.en-US.md +++ b/components/tooltip/index.en-US.md @@ -41,6 +41,10 @@ Common props ref:[Common props](/docs/react/common-props) +## Semantic DOM + + + ## Design Token diff --git a/components/tooltip/index.tsx b/components/tooltip/index.tsx index 55c63a139f..39f6d00381 100644 --- a/components/tooltip/index.tsx +++ b/components/tooltip/index.tsx @@ -91,6 +91,14 @@ interface LegacyTooltipProps } export interface AbstractTooltipProps extends LegacyTooltipProps { + styles?: { + root?: React.CSSProperties; + body?: React.CSSProperties; + }; + classNames?: { + root?: string; + body?: string; + }; style?: React.CSSProperties; className?: string; rootClassName?: string; @@ -130,7 +138,6 @@ const InternalTooltip = React.forwardRef((props, ref) prefixCls: customizePrefixCls, openClassName, getTooltipContainer, - overlayClassName, color, overlayInnerStyle, children, @@ -153,6 +160,7 @@ const InternalTooltip = React.forwardRef((props, ref) getPopupContainer: getContextPopupContainer, getPrefixCls, direction, + tooltip, } = React.useContext(ConfigContext); // ============================== Ref =============================== @@ -181,6 +189,9 @@ const InternalTooltip = React.forwardRef((props, ref) ['onVisibleChange', 'onOpenChange'], ['afterVisibleChange', 'afterOpenChange'], ['arrowPointAtCenter', 'arrow={{ pointAtCenter: true }}'], + ['overlayStyle', 'styles={{ root: {} }}'], + ['overlayInnerStyle', 'styles={{ body: {} }}'], + ['overlayClassName', 'classNames={{ root: {} }}'], ].forEach(([deprecatedName, newName]) => { warning.deprecated(!(deprecatedName in props), deprecatedName, newName); }); @@ -253,6 +264,9 @@ const InternalTooltip = React.forwardRef((props, ref) mouseLeaveDelay = 0.1, overlayStyle, rootClassName, + overlayClassName, + styles, + classNames: tooltipClassNames, ...otherProps } = props; @@ -282,12 +296,8 @@ const InternalTooltip = React.forwardRef((props, ref) // Color const colorInfo = parseColor(prefixCls, color); const arrowContentStyle = colorInfo.arrowStyle; - const formattedOverlayInnerStyle: React.CSSProperties = { - ...overlayInnerStyle, - ...colorInfo.overlayStyle, - }; - const customOverlayClassName = classNames( + const rootClassNames = classNames( overlayClassName, { [`${prefixCls}-rtl`]: direction === 'rtl', @@ -296,8 +306,13 @@ const InternalTooltip = React.forwardRef((props, ref) rootClassName, hashId, cssVarCls, + tooltip?.className, + tooltip?.classNames?.root, + tooltipClassNames?.root, ); + const bodyClassNames = classNames(tooltip?.classNames?.body, tooltipClassNames?.body); + // ============================ zIndex ============================ const [zIndex, contextZIndex] = useZIndex('Tooltip', otherProps.zIndex); @@ -310,8 +325,22 @@ const InternalTooltip = React.forwardRef((props, ref) mouseEnterDelay={mouseEnterDelay} mouseLeaveDelay={mouseLeaveDelay} prefixCls={prefixCls} - overlayClassName={customOverlayClassName} - overlayStyle={{ ...arrowContentStyle, ...overlayStyle }} + classNames={{ root: rootClassNames, body: bodyClassNames }} + styles={{ + root: { + ...arrowContentStyle, + ...tooltip?.styles?.root, + ...tooltip?.style, + ...overlayStyle, + ...styles?.root, + }, + body: { + ...tooltip?.styles?.body, + ...overlayInnerStyle, + ...styles?.body, + ...colorInfo.overlayStyle, + }, + }} getTooltipContainer={getPopupContainer || getTooltipContainer || getContextPopupContainer} ref={tooltipRef} builtinPlacements={tooltipPlacements} @@ -319,7 +348,6 @@ const InternalTooltip = React.forwardRef((props, ref) visible={tempOpen} onVisibleChange={onOpenChange} afterVisibleChange={afterOpenChange ?? afterVisibleChange} - overlayInnerStyle={formattedOverlayInnerStyle} arrowContent={} motion={{ motionName: getTransitionName(rootPrefixCls, 'zoom-big-fast', props.transitionName), diff --git a/components/tooltip/index.zh-CN.md b/components/tooltip/index.zh-CN.md index 9f97a65c8b..b9ba9c3c0e 100644 --- a/components/tooltip/index.zh-CN.md +++ b/components/tooltip/index.zh-CN.md @@ -43,6 +43,10 @@ demo: +## Semantic DOM + + + ## 主题变量(Design Token) diff --git a/components/tour/style/index.ts b/components/tour/style/index.ts index 3feda6117b..f265ffaf68 100644 --- a/components/tour/style/index.ts +++ b/components/tour/style/index.ts @@ -1,5 +1,5 @@ import { unit } from '@ant-design/cssinjs'; -import { TinyColor } from '@ctrl/tinycolor'; +import { FastColor } from '@ant-design/fast-color'; import { genFocusStyle, resetComponent } from '../../style'; import type { ArrowOffsetToken } from '../../style/placementArrow'; @@ -267,8 +267,8 @@ const genBaseStyle: GenerateStyle = (token) => { export const prepareComponentToken: GetDefaultToken<'Tour'> = (token) => ({ zIndexPopup: token.zIndexPopupBase + 70, closeBtnSize: token.fontSize * token.lineHeight, - primaryPrevBtnBg: new TinyColor(token.colorTextLightSolid).setAlpha(0.15).toRgbString(), - primaryNextBtnHoverBg: new TinyColor(token.colorBgTextHover) + primaryPrevBtnBg: new FastColor(token.colorTextLightSolid).setA(0.15).toRgbString(), + primaryNextBtnHoverBg: new FastColor(token.colorBgTextHover) .onBackground(token.colorWhite) .toRgbString(), ...getArrowOffsetToken({ diff --git a/components/transfer/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/transfer/__tests__/__snapshots__/demo-extend.test.ts.snap index 6871e5bd0b..9df6ce1f09 100644 --- a/components/transfer/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/transfer/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -169,10 +169,9 @@ exports[`renders components/transfer/demo/advanced.tsx extend context correctly - - +
@@ -700,10 +699,9 @@ exports[`renders components/transfer/demo/advanced.tsx extend context correctly - - +
@@ -3279,10 +3277,9 @@ Array [ - - +
@@ -3589,10 +3586,9 @@ Array [ - - +
@@ -8680,10 +8676,9 @@ exports[`renders components/transfer/demo/search.tsx extend context correctly 1` - - +
@@ -9191,10 +9186,9 @@ exports[`renders components/transfer/demo/search.tsx extend context correctly 1` - - +
@@ -10081,10 +10075,9 @@ exports[`renders components/transfer/demo/status.tsx extend context correctly 1` - - +
@@ -10391,10 +10384,9 @@ exports[`renders components/transfer/demo/status.tsx extend context correctly 1` - - +
@@ -10544,10 +10536,9 @@ exports[`renders components/transfer/demo/table-transfer.tsx extend context corr - - +
@@ -11443,10 +11434,9 @@ exports[`renders components/transfer/demo/table-transfer.tsx extend context corr - - +
@@ -11812,7 +11802,6 @@ exports[`renders components/transfer/demo/tree-transfer.tsx extend context corre >
@@ -358,10 +357,9 @@ exports[`renders components/transfer/demo/advanced.tsx correctly 1`] = ` - - +
@@ -2234,10 +2232,9 @@ Array [ - - +
@@ -2473,10 +2470,9 @@ Array [ - - +
@@ -5687,10 +5683,9 @@ exports[`renders components/transfer/demo/search.tsx correctly 1`] = ` - - +
@@ -5926,10 +5921,9 @@ exports[`renders components/transfer/demo/search.tsx correctly 1`] = ` - - +
@@ -6399,10 +6393,9 @@ exports[`renders components/transfer/demo/status.tsx correctly 1`] = ` - - +
@@ -6638,10 +6631,9 @@ exports[`renders components/transfer/demo/status.tsx correctly 1`] = ` - - +
@@ -6792,10 +6784,9 @@ exports[`renders components/transfer/demo/table-transfer.tsx correctly 1`] = ` - - +
@@ -7591,10 +7582,9 @@ exports[`renders components/transfer/demo/table-transfer.tsx correctly 1`] = ` - - +
@@ -7858,7 +7848,6 @@ exports[`renders components/transfer/demo/tree-transfer.tsx correctly 1`] = ` >