mirror of
https://github.com/ant-design/ant-design.git
synced 2024-11-28 13:09:40 +08:00
commit
b0d69a6878
@ -31,7 +31,7 @@ timeline: true
|
||||
- 🆕 Image supports `imageRender`, `toolbarRender` attributes to support custom rendering of preview images and toolbars, also supports new props such as `onTransform`, `minScale`, `maxScale`. Image.PreviewGroup supports `items` attribute to pass in list data, and fixes that the native attributes of the img tag are not passed to preview images The problem. [#43075](https://github.com/ant-design/ant-design/pull/43075) [@linxianxi](https://github.com/linxianxi)
|
||||
- 🆕 Modify the layout style of the Image preview, the `preview` attribute supports `closeIcon`, Image.PreviewGroup supports the `fallback` attribute, and fixes the problem of loading preview resources in advance. [#43167](https://github.com/ant-design/ant-design/pull/43167) [@linxianxi](https://github.com/linxianxi)
|
||||
- 🆕 Changed the layout style, Preview now supports `closeIcon`, PreviewGroup now supports `fallback`, and fixed an issue where preview resources would be loaded at the beginning.[#43167](https://github.com/ant-design/ant-design/pull/43167) [@linxianxi](https://github.com/linxianxi)
|
||||
- 🛠 InputNumber was refactored to use rc-input. (#42762)。[#42762](https://github.com/ant-design/ant-design/pull/42762) [@muxin](https://github.com/muxin)
|
||||
- 🛠 InputNumber was refactored to use rc-input. (#43000)。[#42762](https://github.com/ant-design/ant-design/pull/43000) [@MuxinFeng](https://github.com/MuxinFeng)
|
||||
- 🛠 Resolved Circular dependency issue in vite, rollup, meteor and microbundle. [#42750](https://github.com/ant-design/ant-design/pull/42750). Thanks to [@jrr997](https://github.com/jrr997), [@kiner-tang](https://github.com/kiner-tang) and [@MuxinFeng](https://github.com/MuxinFeng) for their contributions.
|
||||
- 🐞 Remove default values (empty string) of `className` prop in Anchor, CollapsePanel, and Input.Group. [#43481](https://github.com/ant-design/ant-design/pull/43481) [@thinkasany](https://github.com/thinkasany)
|
||||
- 🐞 Fix Upload progress bar missing fade motion. [#43471](https://github.com/ant-design/ant-design/pull/43471)
|
||||
@ -838,7 +838,7 @@ timeline: true
|
||||
- 🐞 Fix Tree config `checkable` and `blockNode` not makes `title` stretch issue. [#39209](https://github.com/ant-design/ant-design/pull/39209) [@Wxh16144](https://github.com/Wxh16144)
|
||||
- 🐞 Fix Dropdown sub menu missing motion. [#39235](https://github.com/ant-design/ant-design/pull/39235)
|
||||
- 💄 Fix RangePicker time panel padding style. [#39228](https://github.com/ant-design/ant-design/pull/39228)
|
||||
- 🐞 Fix Card action button round style. [#39210](https://github.com/ant-design/ant-design/pull/39210) [@muxin](https://github.com/muxin)
|
||||
- 🐞 Fix Card action button round style. [#39210](https://github.com/ant-design/ant-design/pull/39210) [@MuxinFeng](https://github.com/MuxinFeng)
|
||||
- 🐞 Fix Badge wave effect color not follow `color`. [#39182](https://github.com/ant-design/ant-design/pull/39182) [@li-jia-nan](https://github.com/li-jia-nan)
|
||||
- 🐞 Fix Radio disabled status check style. [#39165](https://github.com/ant-design/ant-design/pull/39165) [@Wxh16144](https://github.com/Wxh16144)
|
||||
- 🐞 Fixed TextArea count style when `resize` is not `none`. [#39121](https://github.com/ant-design/ant-design/pull/39121) [@51wangping](https://github.com/51wangping)
|
||||
|
@ -31,7 +31,7 @@ timeline: true
|
||||
- 🆕 Anchor 添加 `replace` 属性。[#43006](https://github.com/ant-design/ant-design/pull/43006) [@ds1371dani](https://github.com/ds1371dani)
|
||||
- 🆕 Image 支持 `imageRender`、`toolbarRender` 属性以支持预览图和工具栏的自定义渲染,还支持了 `onTransform`、`minScale`、`maxScale` 等新属性,Image.PreviewGroup 支持 `items` 属性传入列表数据,并修复了 img 标签的原生属性没有传递给预览图的问题。[#43075](https://github.com/ant-design/ant-design/pull/43075) [@linxianxi](https://github.com/linxianxi)
|
||||
- 🆕 修改 Image 预览图的布局风格,`preview` 属性支持 `closeIcon`,Image.PreviewGroup 支持 `fallback` 属性,修复加载预览资源提前加载的问题。[#43167](https://github.com/ant-design/ant-design/pull/43167) [@linxianxi](https://github.com/linxianxi)
|
||||
- 🛠 InputNumber 使用 rc-input 进行重构。[#42762](https://github.com/ant-design/ant-design/pull/42762) [@muxin](https://github.com/muxin)
|
||||
- 🛠 InputNumber 使用 rc-input 进行重构。[#43000](https://github.com/ant-design/ant-design/pull/43000) [@MuxinFeng](https://github.com/MuxinFeng)
|
||||
- 🛠 解决 vite、rollup、meteor、microbundle 等构建工具中遇到的循环依赖问题,并增加相关的检测。[#42750](https://github.com/ant-design/ant-design/pull/42750),感谢 [@jrr997](https://github.com/jrr997)、[@kiner-tang](https://github.com/kiner-tang) 和 [@MuxinFeng](https://github.com/MuxinFeng) 的贡献。
|
||||
- 🐞 移除 Anchor/CollapsePanel/Input.Group 组件中 `className` 属性的默认值(空字符串)。 [#43481](https://github.com/ant-design/ant-design/pull/43481) [@thinkasany](https://github.com/thinkasany)
|
||||
- 🐞 修复 Upload 上传进度条延迟消失且丢失动画效果的问题。[#43471](https://github.com/ant-design/ant-design/pull/43471)
|
||||
@ -839,7 +839,7 @@ timeline: true
|
||||
- 🐞 修复 Tree `checkable` 与 `blockNode` 配合时,`title` 元素不拉伸的问题。[#39209](https://github.com/ant-design/ant-design/pull/39209) [@Wxh16144](https://github.com/Wxh16144)
|
||||
- 🐞 修复 Dropdown 二级菜单丢失动画的问题。[#39235](https://github.com/ant-design/ant-design/pull/39235)
|
||||
- 💄 修复 RangePicker 内时间面板的 padding 样式。[#39228](https://github.com/ant-design/ant-design/pull/39228)
|
||||
- 🐞 修复 Card 的按钮组圆角样式。[#39210](https://github.com/ant-design/ant-design/pull/39210) [@muxin](https://github.com/muxin)
|
||||
- 🐞 修复 Card 的按钮组圆角样式。[#39210](https://github.com/ant-design/ant-design/pull/39210) [@MuxinFeng](https://github.com/MuxinFeng)
|
||||
- 🐞 修复了 Badge 自定义颜色的时候,波纹的颜色不会跟着小圆点颜色发生变化的问题。[#39182](https://github.com/ant-design/ant-design/pull/39182) [@li-jia-nan](https://github.com/li-jia-nan)
|
||||
- 🐞 修复 Radio 禁用状态选中样式。[#39165](https://github.com/ant-design/ant-design/pull/39165) [@Wxh16144](https://github.com/Wxh16144)
|
||||
- 🐞 修复 TextArea `resize` 不是 `none` 时计数文字的样式问题。[#39121](https://github.com/ant-design/ant-design/pull/39121) [@51wangping](https://github.com/51wangping)
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import ResizeObserver from 'rc-resize-observer';
|
||||
import omit from 'rc-util/lib/omit';
|
||||
|
@ -165,7 +165,7 @@ exports[`renders components/alert/demo/action.tsx extend context correctly 1`] =
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-ghost ant-btn-sm"
|
||||
class="ant-btn ant-btn-text ant-btn-sm"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
@ -247,7 +247,7 @@ exports[`renders components/alert/demo/action.tsx extend context correctly 1`] =
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-ghost ant-btn-sm ant-btn-dangerous"
|
||||
class="ant-btn ant-btn-default ant-btn-sm ant-btn-background-ghost ant-btn-dangerous"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
|
@ -165,7 +165,7 @@ exports[`renders components/alert/demo/action.tsx correctly 1`] = `
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-ghost ant-btn-sm"
|
||||
class="ant-btn ant-btn-text ant-btn-sm"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
@ -247,7 +247,7 @@ exports[`renders components/alert/demo/action.tsx correctly 1`] = `
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-ghost ant-btn-sm ant-btn-dangerous"
|
||||
class="ant-btn ant-btn-default ant-btn-sm ant-btn-background-ghost ant-btn-dangerous"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
|
@ -30,7 +30,7 @@ const App: React.FC = () => (
|
||||
type="warning"
|
||||
action={
|
||||
<Space>
|
||||
<Button size="small" type="ghost">
|
||||
<Button type="text" size="small" ghost>
|
||||
Done
|
||||
</Button>
|
||||
</Space>
|
||||
@ -46,7 +46,7 @@ const App: React.FC = () => (
|
||||
<Button size="small" type="primary">
|
||||
Accept
|
||||
</Button>
|
||||
<Button size="small" danger type="ghost">
|
||||
<Button size="small" danger ghost>
|
||||
Decline
|
||||
</Button>
|
||||
</Space>
|
||||
|
@ -10,14 +10,14 @@ const App: React.FC = () => (
|
||||
<Alert
|
||||
message="Warning Text Warning Text Warning TextW arning Text Warning Text Warning TextWarning Text"
|
||||
type="warning"
|
||||
closeIcon
|
||||
closable
|
||||
onClose={onClose}
|
||||
/>
|
||||
<Alert
|
||||
message="Error Text"
|
||||
description="Error Description Error Description Error Description Error Description Error Description Error Description"
|
||||
type="error"
|
||||
closeIcon
|
||||
closable
|
||||
onClose={onClose}
|
||||
/>
|
||||
</Space>
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { AlertProps } from './Alert';
|
||||
import InternalAlert from './Alert';
|
||||
import ErrorBoundary from './ErrorBoundary';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import InternalAnchor from './Anchor';
|
||||
import AnchorLink from './AnchorLink';
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { ReactNode } from 'react';
|
||||
import React, { useContext } from 'react';
|
||||
|
@ -1,10 +1,4 @@
|
||||
/**
|
||||
* TODO: 4.0
|
||||
*
|
||||
* - Remove `dataSource`
|
||||
* - `size` not work with customizeInput
|
||||
* - CustomizeInput not feedback `ENTER` key since accessibility enhancement
|
||||
*/
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { BaseSelectRef } from 'rc-select';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { ForwardRefExoticComponent, RefAttributes } from 'react';
|
||||
import type { AvatarProps } from './avatar';
|
||||
import InternalAvatar from './avatar';
|
||||
|
@ -1,15 +1,17 @@
|
||||
'use client';
|
||||
|
||||
import VerticalAlignTopOutlined from '@ant-design/icons/VerticalAlignTopOutlined';
|
||||
import classNames from 'classnames';
|
||||
import CSSMotion from 'rc-motion';
|
||||
import omit from 'rc-util/lib/omit';
|
||||
import * as React from 'react';
|
||||
import type { ConfigConsumerProps } from '../config-provider';
|
||||
import { ConfigContext } from '../config-provider';
|
||||
import getScroll from '../_util/getScroll';
|
||||
import { cloneElement } from '../_util/reactNode';
|
||||
import scrollTo from '../_util/scrollTo';
|
||||
import throttleByAnimationFrame from '../_util/throttleByAnimationFrame';
|
||||
import warning from '../_util/warning';
|
||||
import type { ConfigConsumerProps } from '../config-provider';
|
||||
import { ConfigContext } from '../config-provider';
|
||||
import useStyle from './style';
|
||||
|
||||
export interface BackTopProps {
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classnames from 'classnames';
|
||||
import CSSMotion from 'rc-motion';
|
||||
import * as React from 'react';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Breadcrumb from './Breadcrumb';
|
||||
|
||||
export type { BreadcrumbProps } from './Breadcrumb';
|
||||
|
@ -1,6 +1,6 @@
|
||||
## zh-CN
|
||||
|
||||
添加 `loading` 属性即可让按钮处于加载状态,最后两个按钮演示点击后进入加载状态。
|
||||
添加 `loading` 属性即可让按钮处于加载状态,最后三个按钮演示点击后进入加载状态。
|
||||
|
||||
## en-US
|
||||
|
||||
|
@ -67,7 +67,7 @@ Different button styles can be generated by setting Button properties. The recom
|
||||
| size | Set the size of button | `large` \| `middle` \| `small` | `middle` | |
|
||||
| styles | Semantic DOM style | Record<SemanticDOM, CSSProperties> | - | 5.4.0 |
|
||||
| target | Same as target attribute of a, works when href is specified | string | - | |
|
||||
| type | Can be set to `primary` `ghost` `dashed` `link` `text` `default` | string | `default` | |
|
||||
| type | Set button type | `primary` \| `dashed` \| `link` \| `text` \| `default` | `default` | |
|
||||
| onClick | Set the handler to handle `click` event | (event: MouseEvent) => void | - | |
|
||||
|
||||
It accepts all props which native buttons support.
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Button from './button';
|
||||
|
||||
export type { SizeType as ButtonSize } from '../config-provider/SizeContext';
|
||||
|
@ -72,7 +72,7 @@ group:
|
||||
| size | 设置按钮大小 | `large` \| `middle` \| `small` | `middle` | |
|
||||
| styles | 语义化结构 style | Record<SemanticDOM, CSSProperties> | - | 5.4.0 |
|
||||
| target | 相当于 a 链接的 target 属性,href 存在时生效 | string | - | |
|
||||
| type | 设置按钮类型 | `primary` \| `ghost` \| `dashed` \| `link` \| `text` \| `default` | `default` | |
|
||||
| type | 设置按钮类型 | `primary` \| `dashed` \| `link` \| `text` \| `default` | `default` | |
|
||||
| onClick | 点击按钮时的回调 | (event: MouseEvent) => void | - | |
|
||||
|
||||
支持原生 button 的其他所有属性。
|
||||
|
@ -409,6 +409,13 @@ const genTypeButtonStyle: GenerateStyle<ButtonToken> = (token) => {
|
||||
[`${componentCls}-dashed`]: genDashedButtonStyle(token),
|
||||
[`${componentCls}-link`]: genLinkButtonStyle(token),
|
||||
[`${componentCls}-text`]: genTextButtonStyle(token),
|
||||
[`${componentCls}-ghost`]: genGhostButtonStyle(
|
||||
token.componentCls,
|
||||
token.colorBgContainer,
|
||||
token.colorBgContainer,
|
||||
token.colorTextDisabled,
|
||||
token.colorBorder,
|
||||
),
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjsGenerateConfig from 'rc-picker/lib/generate/dayjs';
|
||||
import type { CalendarProps } from './generateCalendar';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import InternalCard from './Card';
|
||||
import Grid from './Grid';
|
||||
import Meta from './Meta';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { Settings } from '@ant-design/react-slick';
|
||||
import SlickCarousel from '@ant-design/react-slick';
|
||||
import classNames from 'classnames';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import LeftOutlined from '@ant-design/icons/LeftOutlined';
|
||||
import LoadingOutlined from '@ant-design/icons/LoadingOutlined';
|
||||
import RightOutlined from '@ant-design/icons/RightOutlined';
|
||||
|
@ -113,8 +113,8 @@ const InternalCheckbox: React.ForwardRefRenderFunction<CheckboxRef, CheckboxProp
|
||||
checkboxProps.checked = checkboxGroup.value.includes(restProps.value);
|
||||
}
|
||||
const classString = classNames(
|
||||
`${prefixCls}-wrapper`,
|
||||
{
|
||||
[`${prefixCls}-wrapper`]: true,
|
||||
[`${prefixCls}-rtl`]: direction === 'rtl',
|
||||
[`${prefixCls}-wrapper-checked`]: checkboxProps.checked,
|
||||
[`${prefixCls}-wrapper-disabled`]: mergedDisabled,
|
||||
|
@ -1,11 +1,13 @@
|
||||
'use client';
|
||||
|
||||
import type * as React from 'react';
|
||||
import type { CheckboxProps } from './Checkbox';
|
||||
import InternalCheckbox from './Checkbox';
|
||||
import Group from './Group';
|
||||
|
||||
export type { CheckboxRef } from 'rc-checkbox';
|
||||
export type { CheckboxChangeEvent, CheckboxProps } from './Checkbox';
|
||||
export type { CheckboxGroupProps, CheckboxOptionType } from './Group';
|
||||
export type { CheckboxRef } from 'rc-checkbox';
|
||||
|
||||
type CompoundedComponent = React.ForwardRefExoticComponent<
|
||||
CheckboxProps & React.RefAttributes<HTMLInputElement>
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { Col, type ColProps, type ColSize } from '../grid';
|
||||
|
||||
export type { ColProps, ColSize };
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Collapse from './Collapse';
|
||||
|
||||
export type { CollapseProps } from './Collapse';
|
||||
|
@ -1,6 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import ColorPicker from './ColorPicker';
|
||||
|
||||
export type { Color } from './color';
|
||||
export type { ColorPickerProps } from './ColorPicker';
|
||||
export type { Color } from './color';
|
||||
|
||||
export default ColorPicker;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { createTheme } from '@ant-design/cssinjs';
|
||||
import IconContext from '@ant-design/icons/lib/components/Context';
|
||||
import type { ValidateMessages } from 'rc-field-form/lib/interface';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import dayjsGenerateConfig from 'rc-picker/lib/generate/dayjs';
|
||||
import genPurePanel from '../_util/PurePanel';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
/* eslint-disable react/no-array-index-key */
|
||||
import classNames from 'classnames';
|
||||
import toArray from 'rc-util/lib/Children/toArray';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import warning from '../_util/warning';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { DrawerProps as RcDrawerProps } from 'rc-drawer';
|
||||
import RcDrawer from 'rc-drawer';
|
||||
@ -15,7 +17,7 @@ import { NoCompactStyle } from '../space/Compact';
|
||||
import useStyle from './style';
|
||||
|
||||
const SizeTypes = ['default', 'large'] as const;
|
||||
type sizeType = (typeof SizeTypes)[number];
|
||||
type sizeType = typeof SizeTypes[number];
|
||||
|
||||
export interface PushState {
|
||||
distance: string | number;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import InternalDropdown from './dropdown';
|
||||
import DropdownButton from './dropdown-button';
|
||||
|
||||
|
@ -84,6 +84,6 @@ demo:
|
||||
|
||||
## FAQ
|
||||
|
||||
### Dropdown 在水平方向超出屏幕时会被挤压改怎么办?
|
||||
### Dropdown 在水平方向超出屏幕时会被挤压该怎么办?
|
||||
|
||||
你可以通过 `width: max-content` 来解决这个问题,参考 [#43025](https://github.com/ant-design/ant-design/issues/43025#issuecomment-1594394135)。
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import { ConfigContext } from '../config-provider';
|
||||
|
@ -1,6 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import BackTop from './BackTop';
|
||||
import FloatButton from './FloatButton';
|
||||
import FloatButtonGroup from './FloatButtonGroup';
|
||||
import BackTop from './BackTop';
|
||||
import PurePanel from './PurePanel';
|
||||
|
||||
FloatButton.BackTop = BackTop;
|
||||
|
@ -101,8 +101,8 @@ const InternalForm: React.ForwardRefRenderFunction<FormInstance, FormProps> = (p
|
||||
|
||||
const formClassName = classNames(
|
||||
prefixCls,
|
||||
`${prefixCls}-${layout}`,
|
||||
{
|
||||
[`${prefixCls}-${layout}`]: true,
|
||||
[`${prefixCls}-hide-required-mark`]: mergedRequiredMark === false,
|
||||
[`${prefixCls}-rtl`]: direction === 'rtl',
|
||||
[`${prefixCls}-${mergedSize}`]: mergedSize,
|
||||
|
@ -1,14 +1,16 @@
|
||||
'use client';
|
||||
|
||||
import type { Rule, RuleObject, RuleRender } from 'rc-field-form/lib/interface';
|
||||
import warning from '../_util/warning';
|
||||
import { FormProvider } from './context';
|
||||
import ErrorList, { type ErrorListProps } from './ErrorList';
|
||||
import InternalForm, { type FormInstance, type FormProps, useForm, useWatch } from './Form';
|
||||
import InternalForm, { useForm, useWatch, type FormInstance, type FormProps } from './Form';
|
||||
import Item, { type FormItemProps } from './FormItem';
|
||||
import List, {
|
||||
type FormListFieldData,
|
||||
type FormListOperation,
|
||||
type FormListProps,
|
||||
} from './FormList';
|
||||
import { FormProvider } from './context';
|
||||
import useFormInstance from './hooks/useFormInstance';
|
||||
|
||||
type InternalFormType = typeof InternalForm;
|
||||
@ -44,16 +46,16 @@ Form.create = () => {
|
||||
};
|
||||
|
||||
export type {
|
||||
FormInstance,
|
||||
FormProps,
|
||||
FormItemProps,
|
||||
ErrorListProps,
|
||||
FormInstance,
|
||||
FormItemProps,
|
||||
FormListFieldData,
|
||||
FormListOperation,
|
||||
FormListProps,
|
||||
FormProps,
|
||||
Rule,
|
||||
RuleObject,
|
||||
RuleRender,
|
||||
FormListProps,
|
||||
FormListFieldData,
|
||||
FormListOperation,
|
||||
};
|
||||
|
||||
export default Form;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Col from './col';
|
||||
import useInternalBreakpoint from './hooks/useBreakpoint';
|
||||
import Row from './row';
|
||||
@ -9,6 +11,6 @@ function useBreakpoint() {
|
||||
|
||||
export type { ColProps, ColSize } from './col';
|
||||
export type { RowProps } from './row';
|
||||
export { Row, Col };
|
||||
export { Col, Row };
|
||||
|
||||
export default { useBreakpoint };
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import EyeOutlined from '@ant-design/icons/EyeOutlined';
|
||||
import classNames from 'classnames';
|
||||
import RcImage, { type ImageProps } from 'rc-image';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
export type { Breakpoint } from './_util/responsiveObserver';
|
||||
export { default as Affix } from './affix';
|
||||
export type { AffixProps } from './affix';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import DownOutlined from '@ant-design/icons/DownOutlined';
|
||||
import UpOutlined from '@ant-design/icons/UpOutlined';
|
||||
import type { ValueType } from '@rc-component/mini-decimal';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type * as React from 'react';
|
||||
import Group from './Group';
|
||||
import type { InputProps, InputRef } from './Input';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import InternalLayout, { Content, Footer, Header } from './layout';
|
||||
import Sider from './Sider';
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
import React from 'react';
|
||||
import type { ListGridType } from '.';
|
||||
|
||||
export interface ListConsumerProps {
|
||||
grid?: any;
|
||||
grid?: ListGridType;
|
||||
itemLayout?: string;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
// eslint-disable-next-line import/no-named-as-default
|
||||
import * as React from 'react';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { ValidateMessages } from 'rc-field-form/lib/interface';
|
||||
import * as React from 'react';
|
||||
import warning from '../_util/warning';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import RcMentions from 'rc-mentions';
|
||||
import type {
|
||||
|
@ -1,19 +1,21 @@
|
||||
'use client';
|
||||
|
||||
import type { MenuRef as RcMenuRef } from 'rc-menu';
|
||||
import { ItemGroup } from 'rc-menu';
|
||||
import * as React from 'react';
|
||||
import { forwardRef, useImperativeHandle, useRef } from 'react';
|
||||
import type { MenuProps } from './menu';
|
||||
import InternalMenu from './menu';
|
||||
import { SiderContext } from '../layout/Sider';
|
||||
import type { MenuTheme } from './MenuContext';
|
||||
import MenuDivider from './MenuDivider';
|
||||
import Item, { type MenuItemProps } from './MenuItem';
|
||||
import SubMenu, { type SubMenuProps } from './SubMenu';
|
||||
import type { ItemType, MenuItemType } from './hooks/useItems';
|
||||
import type { MenuProps } from './menu';
|
||||
import InternalMenu from './menu';
|
||||
|
||||
export type { MenuItemGroupProps } from 'rc-menu';
|
||||
export type { MenuDividerProps } from './MenuDivider';
|
||||
export type { MenuTheme, SubMenuProps, MenuItemProps, MenuProps };
|
||||
export type { MenuItemProps, MenuProps, MenuTheme, SubMenuProps };
|
||||
|
||||
export type MenuRef = {
|
||||
menu: RcMenuRef | null;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { render } from 'rc-util/lib/React/render';
|
||||
import * as React from 'react';
|
||||
import ConfigProvider, { globalConfig, warnContext } from '../config-provider';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { ModalStaticFunctions } from './confirm';
|
||||
import confirm, {
|
||||
modalGlobalConfig,
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { render } from 'rc-util/lib/React/render';
|
||||
import * as React from 'react';
|
||||
import ConfigProvider, { globalConfig, warnContext } from '../config-provider';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Pagination from './Pagination';
|
||||
|
||||
export type { PaginationConfig, PaginationProps } from './Pagination';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import ExclamationCircleFilled from '@ant-design/icons/ExclamationCircleFilled';
|
||||
import classNames from 'classnames';
|
||||
import KeyCode from 'rc-util/lib/KeyCode';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import type { RenderFunction } from '../_util/getRenderPropValue';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Progress from './progress';
|
||||
|
||||
export type { ProgressAriaProps, ProgressProps } from './progress';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { ReloadOutlined } from '@ant-design/icons';
|
||||
import classNames from 'classnames';
|
||||
import { QRCodeCanvas, QRCodeSVG } from 'qrcode.react';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type * as React from 'react';
|
||||
import Group from './group';
|
||||
import type { RadioProps } from './interface';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import StarFilled from '@ant-design/icons/StarFilled';
|
||||
import classNames from 'classnames';
|
||||
import RcRate from 'rc-rate';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import CheckCircleFilled from '@ant-design/icons/CheckCircleFilled';
|
||||
import CloseCircleFilled from '@ant-design/icons/CloseCircleFilled';
|
||||
import ExclamationCircleFilled from '@ant-design/icons/ExclamationCircleFilled';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { Row, type RowProps } from '../grid';
|
||||
|
||||
export type { RowProps };
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type {
|
||||
SegmentedLabeledOption as RcSegmentedLabeledOption,
|
||||
|
@ -6656,6 +6656,297 @@ Array [
|
||||
]
|
||||
`;
|
||||
|
||||
exports[`renders components/select/demo/placement-debug.tsx extend context correctly 1`] = `
|
||||
<div
|
||||
style="height: 100%; min-height: 500px; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative;"
|
||||
>
|
||||
<div
|
||||
class="ant-space ant-space-horizontal ant-space-align-center"
|
||||
style="position: absolute; top: 0px; left: 50%; transform: translateX(-50%);"
|
||||
>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
style="margin-right: 8px;"
|
||||
>
|
||||
<div
|
||||
class="ant-radio-group ant-radio-group-outline"
|
||||
>
|
||||
<label
|
||||
class="ant-radio-button-wrapper ant-radio-button-wrapper-checked"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button ant-radio-button-checked"
|
||||
>
|
||||
<input
|
||||
checked=""
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="topLeft"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
TL
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="topRight"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
TR
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="bottomLeft"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
BL
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="bottomRight"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
BR
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
style="margin-right: 8px;"
|
||||
>
|
||||
<button
|
||||
aria-checked="false"
|
||||
class="ant-switch"
|
||||
role="switch"
|
||||
type="button"
|
||||
>
|
||||
<div
|
||||
class="ant-switch-handle"
|
||||
/>
|
||||
<span
|
||||
class="ant-switch-inner"
|
||||
>
|
||||
<span
|
||||
class="ant-switch-inner-checked"
|
||||
/>
|
||||
<span
|
||||
class="ant-switch-inner-unchecked"
|
||||
/>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-default"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Random
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="ant-select ant-select-single ant-select-show-arrow"
|
||||
style="width: 120px;"
|
||||
>
|
||||
<div
|
||||
class="ant-select-selector"
|
||||
>
|
||||
<span
|
||||
class="ant-select-selection-search"
|
||||
>
|
||||
<input
|
||||
aria-activedescendant="rc_select_TEST_OR_SSR_list_0"
|
||||
aria-autocomplete="list"
|
||||
aria-controls="rc_select_TEST_OR_SSR_list"
|
||||
aria-expanded="false"
|
||||
aria-haspopup="listbox"
|
||||
aria-owns="rc_select_TEST_OR_SSR_list"
|
||||
autocomplete="off"
|
||||
class="ant-select-selection-search-input"
|
||||
id="rc_select_TEST_OR_SSR"
|
||||
readonly=""
|
||||
role="combobox"
|
||||
style="opacity: 0;"
|
||||
type="search"
|
||||
unselectable="on"
|
||||
value=""
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="ant-select-selection-placeholder"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="ant-select-dropdown ant-slide-down-appear ant-slide-down-appear-prepare ant-slide-down ant-select-dropdown-placement-topLeft"
|
||||
style="--arrow-x: 0px; --arrow-y: 0px; left: -1000vw; top: -1000vh; box-sizing: border-box; width: 200px;"
|
||||
>
|
||||
<div>
|
||||
<div
|
||||
id="rc_select_TEST_OR_SSR_list"
|
||||
role="listbox"
|
||||
style="height: 0px; width: 0px; overflow: hidden;"
|
||||
>
|
||||
<div
|
||||
aria-label="Option 0"
|
||||
aria-selected="false"
|
||||
id="rc_select_TEST_OR_SSR_list_0"
|
||||
role="option"
|
||||
>
|
||||
0
|
||||
</div>
|
||||
<div
|
||||
aria-label="Option 1"
|
||||
aria-selected="false"
|
||||
id="rc_select_TEST_OR_SSR_list_1"
|
||||
role="option"
|
||||
>
|
||||
1
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="rc-virtual-list"
|
||||
style="position: relative;"
|
||||
>
|
||||
<div
|
||||
class="rc-virtual-list-holder"
|
||||
style="max-height: 256px; overflow-y: auto;"
|
||||
>
|
||||
<div>
|
||||
<div
|
||||
class="rc-virtual-list-holder-inner"
|
||||
style="display: flex; flex-direction: column;"
|
||||
>
|
||||
<div
|
||||
aria-selected="false"
|
||||
class="ant-select-item ant-select-item-option ant-select-item-option-active"
|
||||
title="Option 0"
|
||||
>
|
||||
<div
|
||||
class="ant-select-item-option-content"
|
||||
>
|
||||
Option 0
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="ant-select-item-option-state"
|
||||
style="user-select: none;"
|
||||
unselectable="on"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
aria-selected="false"
|
||||
class="ant-select-item ant-select-item-option"
|
||||
title="Option 1"
|
||||
>
|
||||
<div
|
||||
class="ant-select-item-option-content"
|
||||
>
|
||||
Option 1
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="ant-select-item-option-state"
|
||||
style="user-select: none;"
|
||||
unselectable="on"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
aria-selected="false"
|
||||
class="ant-select-item ant-select-item-option"
|
||||
title="Option 2"
|
||||
>
|
||||
<div
|
||||
class="ant-select-item-option-content"
|
||||
>
|
||||
Option 2
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="ant-select-item-option-state"
|
||||
style="user-select: none;"
|
||||
unselectable="on"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="ant-select-arrow"
|
||||
style="user-select: none;"
|
||||
unselectable="on"
|
||||
>
|
||||
<span
|
||||
aria-label="down"
|
||||
class="anticon anticon-down ant-select-suffix"
|
||||
role="img"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
data-icon="down"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`renders components/select/demo/responsive.tsx extend context correctly 1`] = `
|
||||
<div
|
||||
class="ant-space ant-space-vertical"
|
||||
|
@ -2158,6 +2158,199 @@ Array [
|
||||
]
|
||||
`;
|
||||
|
||||
exports[`renders components/select/demo/placement-debug.tsx correctly 1`] = `
|
||||
<div
|
||||
style="height:100%;min-height:500px;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative"
|
||||
>
|
||||
<div
|
||||
class="ant-space ant-space-horizontal ant-space-align-center"
|
||||
style="position:absolute;top:0;left:50%;transform:translateX(-50%)"
|
||||
>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
style="margin-right:8px"
|
||||
>
|
||||
<div
|
||||
class="ant-radio-group ant-radio-group-outline"
|
||||
>
|
||||
<label
|
||||
class="ant-radio-button-wrapper ant-radio-button-wrapper-checked"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button ant-radio-button-checked"
|
||||
>
|
||||
<input
|
||||
checked=""
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="topLeft"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
TL
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="topRight"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
TR
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="bottomLeft"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
BL
|
||||
</span>
|
||||
</label>
|
||||
<label
|
||||
class="ant-radio-button-wrapper"
|
||||
>
|
||||
<span
|
||||
class="ant-radio-button"
|
||||
>
|
||||
<input
|
||||
class="ant-radio-button-input"
|
||||
type="radio"
|
||||
value="bottomRight"
|
||||
/>
|
||||
<span
|
||||
class="ant-radio-button-inner"
|
||||
/>
|
||||
</span>
|
||||
<span>
|
||||
BR
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
style="margin-right:8px"
|
||||
>
|
||||
<button
|
||||
aria-checked="false"
|
||||
class="ant-switch"
|
||||
role="switch"
|
||||
type="button"
|
||||
>
|
||||
<div
|
||||
class="ant-switch-handle"
|
||||
/>
|
||||
<span
|
||||
class="ant-switch-inner"
|
||||
>
|
||||
<span
|
||||
class="ant-switch-inner-checked"
|
||||
/>
|
||||
<span
|
||||
class="ant-switch-inner-unchecked"
|
||||
/>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
class="ant-space-item"
|
||||
>
|
||||
<button
|
||||
class="ant-btn ant-btn-default"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Random
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="ant-select ant-select-single ant-select-show-arrow"
|
||||
style="width:120px"
|
||||
>
|
||||
<div
|
||||
class="ant-select-selector"
|
||||
>
|
||||
<span
|
||||
class="ant-select-selection-search"
|
||||
>
|
||||
<input
|
||||
aria-activedescendant="undefined_list_0"
|
||||
aria-autocomplete="list"
|
||||
aria-controls="undefined_list"
|
||||
aria-expanded="false"
|
||||
aria-haspopup="listbox"
|
||||
aria-owns="undefined_list"
|
||||
autocomplete="off"
|
||||
class="ant-select-selection-search-input"
|
||||
readonly=""
|
||||
role="combobox"
|
||||
style="opacity:0"
|
||||
type="search"
|
||||
unselectable="on"
|
||||
value=""
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="ant-select-selection-placeholder"
|
||||
/>
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="ant-select-arrow"
|
||||
style="user-select:none;-webkit-user-select:none"
|
||||
unselectable="on"
|
||||
>
|
||||
<span
|
||||
aria-label="down"
|
||||
class="anticon anticon-down ant-select-suffix"
|
||||
role="img"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
data-icon="down"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`renders components/select/demo/responsive.tsx correctly 1`] = `
|
||||
<div
|
||||
class="ant-space ant-space-vertical"
|
||||
|
7
components/select/demo/placement-debug.md
Normal file
7
components/select/demo/placement-debug.md
Normal file
@ -0,0 +1,7 @@
|
||||
## zh-CN
|
||||
|
||||
可以通过 `placement` 手动指定弹出的位置。
|
||||
|
||||
## en-US
|
||||
|
||||
You can manually specify the position of the popup via `placement`.
|
59
components/select/demo/placement-debug.tsx
Normal file
59
components/select/demo/placement-debug.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
import React, { useState } from 'react';
|
||||
import type { RadioChangeEvent } from 'antd';
|
||||
import { Button, Radio, Select, Space, Switch } from 'antd';
|
||||
import type { SelectCommonPlacement } from 'antd/es/_util/motion';
|
||||
|
||||
const randomOptions = (count?: number) => {
|
||||
const length = count ?? Math.floor(Math.random() * 5) + 1;
|
||||
|
||||
// Random 1 ~ 5 options
|
||||
return Array.from({ length }).map((_, index) => ({
|
||||
value: index,
|
||||
label: `Option ${index}`,
|
||||
}));
|
||||
};
|
||||
|
||||
const App: React.FC = () => {
|
||||
const [placement, SetPlacement] = useState<SelectCommonPlacement>('topLeft');
|
||||
const [open, setOpen] = useState(false);
|
||||
const [options, setOptions] = useState(() => randomOptions(3));
|
||||
|
||||
const placementChange = (e: RadioChangeEvent) => {
|
||||
SetPlacement(e.target.value);
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
height: '100%',
|
||||
minHeight: 500,
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
position: 'relative',
|
||||
}}
|
||||
>
|
||||
<Space style={{ position: 'absolute', top: 0, left: '50%', transform: 'translateX(-50%)' }}>
|
||||
<Radio.Group value={placement} onChange={placementChange}>
|
||||
<Radio.Button value="topLeft">TL</Radio.Button>
|
||||
<Radio.Button value="topRight">TR</Radio.Button>
|
||||
<Radio.Button value="bottomLeft">BL</Radio.Button>
|
||||
<Radio.Button value="bottomRight">BR</Radio.Button>
|
||||
</Radio.Group>
|
||||
|
||||
<Switch checked={open} onChange={() => setOpen((o) => !o)} />
|
||||
<Button onClick={() => setOptions(randomOptions())}>Random</Button>
|
||||
</Space>
|
||||
<Select
|
||||
open={open}
|
||||
style={{ width: 120 }}
|
||||
placement={placement}
|
||||
options={options}
|
||||
popupMatchSelectWidth={200}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default App;
|
@ -40,6 +40,7 @@ Select component to select value from options.
|
||||
<code src="./demo/big-data.tsx">Big Data</code>
|
||||
<code src="./demo/status.tsx">Status</code>
|
||||
<code src="./demo/placement.tsx">Placement</code>
|
||||
<code src="./demo/placement-debug.tsx" debug>Dynamic Height</code>
|
||||
<code src="./demo/debug.tsx" debug>4.0 Debug</code>
|
||||
<code src="./demo/render-panel.tsx" debug>\_InternalPanelDoNotUseOrYouWillBeFired</code>
|
||||
<code src="./demo/option-label-center.tsx" debug>Options label Centered</code>
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
// TODO: 4.0 - codemod should help to change `filterOption` to support node props.
|
||||
import classNames from 'classnames';
|
||||
import type { BaseSelectRef, SelectProps as RcSelectProps } from 'rc-select';
|
||||
@ -165,7 +167,10 @@ const InternalSelect = <
|
||||
prefixCls,
|
||||
});
|
||||
|
||||
const selectProps = omit(props as typeof props & { itemIcon: any }, ['suffixIcon', 'itemIcon']);
|
||||
const selectProps = omit(props as typeof props & { itemIcon: React.ReactNode }, [
|
||||
'suffixIcon',
|
||||
'itemIcon',
|
||||
]);
|
||||
|
||||
const rcSelectRtlDropdownClassName = classNames(
|
||||
popupClassName || dropdownClassName,
|
||||
|
@ -41,6 +41,7 @@ demo:
|
||||
<code src="./demo/big-data.tsx">大数据</code>
|
||||
<code src="./demo/status.tsx">自定义状态</code>
|
||||
<code src="./demo/placement.tsx">弹出位置</code>
|
||||
<code src="./demo/placement-debug.tsx" debug>动态高度</code>
|
||||
<code src="./demo/debug.tsx" debug>4.0 Debug</code>
|
||||
<code src="./demo/render-panel.tsx" debug>\_InternalPanelDoNotUseOrYouWillBeFired</code>
|
||||
<code src="./demo/option-label-center.tsx" debug>选项文本居中</code>
|
||||
|
@ -4,13 +4,16 @@ import type { PopupOverflow } from '../config-provider/context';
|
||||
const getBuiltInPlacements = (popupOverflow?: PopupOverflow): Record<string, AlignType> => {
|
||||
const htmlRegion: AlignType['htmlRegion'] = popupOverflow === 'scroll' ? 'scroll' : 'visible';
|
||||
|
||||
const sharedConfig = {
|
||||
const sharedConfig: AlignType = {
|
||||
overflow: {
|
||||
adjustX: true,
|
||||
adjustY: true,
|
||||
shiftY: true,
|
||||
},
|
||||
htmlRegion,
|
||||
_experimental: {
|
||||
dynamicInset: true,
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Skeleton from './Skeleton';
|
||||
|
||||
export type { SkeletonProps } from './Skeleton';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { SliderProps as RcSliderProps } from 'rc-slider';
|
||||
import RcSlider from 'rc-slider';
|
||||
|
@ -30,8 +30,7 @@ export const useCompactItemContext = (prefixCls: string, direction: DirectionTyp
|
||||
const { compactDirection, isFirstItem, isLastItem } = compactItemContext;
|
||||
const separator = compactDirection === 'vertical' ? '-vertical-' : '-';
|
||||
|
||||
return classNames({
|
||||
[`${prefixCls}-compact${separator}item`]: true,
|
||||
return classNames(`${prefixCls}-compact${separator}item`, {
|
||||
[`${prefixCls}-compact${separator}first-item`]: isFirstItem,
|
||||
[`${prefixCls}-compact${separator}last-item`]: isLastItem,
|
||||
[`${prefixCls}-compact${separator}item-rtl`]: direction === 'rtl',
|
||||
|
@ -12,7 +12,7 @@ export interface ItemProps {
|
||||
style?: React.CSSProperties;
|
||||
}
|
||||
|
||||
export default function Item({
|
||||
const Item: React.FC<ItemProps> = ({
|
||||
className,
|
||||
direction,
|
||||
index,
|
||||
@ -21,7 +21,7 @@ export default function Item({
|
||||
split,
|
||||
wrap,
|
||||
style: customStyle,
|
||||
}: ItemProps) {
|
||||
}) => {
|
||||
const { horizontalSize, verticalSize, latestIndex, supportFlexGap } =
|
||||
React.useContext(SpaceContext);
|
||||
|
||||
@ -56,4 +56,6 @@ export default function Item({
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export default Item;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import toArray from 'rc-util/lib/Children/toArray';
|
||||
import * as React from 'react';
|
||||
@ -10,7 +12,7 @@ import Item from './Item';
|
||||
import { SpaceContextProvider } from './context';
|
||||
import useStyle from './style';
|
||||
|
||||
export type { SpaceContext } from './context';
|
||||
export { SpaceContext } from './context';
|
||||
|
||||
export type SpaceSize = SizeType | number;
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import omit from 'rc-util/lib/omit';
|
||||
import * as React from 'react';
|
||||
@ -9,7 +11,7 @@ import { ConfigContext } from '../config-provider';
|
||||
import useStyle from './style/index';
|
||||
|
||||
const SpinSizes = ['small', 'default', 'large'] as const;
|
||||
export type SpinSize = (typeof SpinSizes)[number];
|
||||
export type SpinSize = typeof SpinSizes[number];
|
||||
export type SpinIndicator = React.ReactElement<HTMLElement>;
|
||||
|
||||
export interface SpinProps {
|
||||
|
@ -1,9 +1,11 @@
|
||||
'use client';
|
||||
|
||||
import type { CountdownProps } from './Countdown';
|
||||
import Countdown from './Countdown';
|
||||
import type { StatisticProps } from './Statistic';
|
||||
import Statistic from './Statistic';
|
||||
|
||||
export type { StatisticProps, CountdownProps };
|
||||
export type { CountdownProps, StatisticProps };
|
||||
|
||||
type CompoundedComponent = {
|
||||
Countdown: typeof Countdown;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import CheckOutlined from '@ant-design/icons/CheckOutlined';
|
||||
import CloseOutlined from '@ant-design/icons/CloseOutlined';
|
||||
import classNames from 'classnames';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
/* eslint-disable import/prefer-default-export */
|
||||
import type { CSSObject } from '@ant-design/cssinjs';
|
||||
import type { AliasToken, DerivativeToken } from '../theme/internal';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import LoadingOutlined from '@ant-design/icons/LoadingOutlined';
|
||||
import classNames from 'classnames';
|
||||
import RcSwitch from 'rc-switch';
|
||||
|
@ -1,8 +1,10 @@
|
||||
'use client';
|
||||
|
||||
import { type TablePaginationConfig, type TableProps } from './InternalTable';
|
||||
import Table from './Table';
|
||||
|
||||
export type { ColumnProps } from './Column';
|
||||
export type { ColumnGroupType, ColumnsType, ColumnType } from './interface';
|
||||
export type { TableProps, TablePaginationConfig };
|
||||
export type { ColumnGroupType, ColumnType, ColumnsType } from './interface';
|
||||
export type { TablePaginationConfig, TableProps };
|
||||
|
||||
export default Table;
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import CloseOutlined from '@ant-design/icons/CloseOutlined';
|
||||
import EllipsisOutlined from '@ant-design/icons/EllipsisOutlined';
|
||||
import PlusOutlined from '@ant-design/icons/PlusOutlined';
|
||||
|
@ -40,8 +40,8 @@ const CheckableTag: React.FC<CheckableTagProps> = (props) => {
|
||||
|
||||
const cls = classNames(
|
||||
prefixCls,
|
||||
`${prefixCls}-checkable`,
|
||||
{
|
||||
[`${prefixCls}-checkable`]: true,
|
||||
[`${prefixCls}-checkable-checked`]: checked,
|
||||
},
|
||||
className,
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React from 'react';
|
||||
import { Simulate } from 'react-dom/test-utils';
|
||||
|
||||
import { CheckCircleOutlined } from '@ant-design/icons';
|
||||
import Tag from '..';
|
||||
import { resetWarned } from '../../_util/warning';
|
||||
|
||||
@ -135,6 +136,11 @@ describe('Tag', () => {
|
||||
expect(onClick).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should only render icon when no children', () => {
|
||||
const { container } = render(<Tag icon={<CheckCircleOutlined />} />);
|
||||
expect(container.querySelector('.ant-tag ')?.childElementCount).toBe(1);
|
||||
});
|
||||
|
||||
it('deprecated warning', () => {
|
||||
resetWarned();
|
||||
const errSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import CloseOutlined from '@ant-design/icons/CloseOutlined';
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
@ -128,7 +130,7 @@ const InternalTag: React.ForwardRefRenderFunction<HTMLSpanElement, TagProps> = (
|
||||
const kids: React.ReactNode = iconNode ? (
|
||||
<>
|
||||
{iconNode}
|
||||
<span>{children}</span>
|
||||
{children && <span>{children}</span>}
|
||||
</>
|
||||
) : (
|
||||
children
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
/* eslint-disable import/prefer-default-export */
|
||||
import getDesignToken from './getDesignToken';
|
||||
import type { GlobalToken } from './interface';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { Dayjs } from 'dayjs';
|
||||
import * as React from 'react';
|
||||
import genPurePanel from '../_util/PurePanel';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import classNames from 'classnames';
|
||||
import * as React from 'react';
|
||||
import { ConfigContext } from '../config-provider';
|
||||
import type { LiteralUnion } from '../_util/type';
|
||||
import { ConfigContext } from '../config-provider';
|
||||
|
||||
type Color = 'blue' | 'red' | 'green' | 'gray';
|
||||
|
||||
@ -39,8 +39,8 @@ const TimelineItem: React.FC<TimelineItemProps> = ({
|
||||
|
||||
const prefixCls = getPrefixCls('timeline', customizePrefixCls);
|
||||
const itemClassName = classNames(
|
||||
`${prefixCls}-item`,
|
||||
{
|
||||
[`${prefixCls}-item`]: true,
|
||||
[`${prefixCls}-item-pending`]: pending,
|
||||
},
|
||||
className,
|
||||
@ -48,8 +48,7 @@ const TimelineItem: React.FC<TimelineItemProps> = ({
|
||||
|
||||
const customColor = /blue|red|green|gray/.test(color || '') ? undefined : color;
|
||||
|
||||
const dotClassName = classNames({
|
||||
[`${prefixCls}-item-head`]: true,
|
||||
const dotClassName = classNames(`${prefixCls}-item-head`, {
|
||||
[`${prefixCls}-item-head-custom`]: !!dot,
|
||||
[`${prefixCls}-item-head-${color}`]: !customColor,
|
||||
});
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Timeline from './Timeline';
|
||||
|
||||
export type { TimelineProps } from './Timeline';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import type { BuildInPlacements } from '@rc-component/trigger';
|
||||
import classNames from 'classnames';
|
||||
import RcTooltip from 'rc-tooltip';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import RCTour from '@rc-component/tour';
|
||||
import classNames from 'classnames';
|
||||
import React, { useContext } from 'react';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { ChangeEvent, CSSProperties } from 'react';
|
||||
import React, { useCallback, useContext } from 'react';
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import type { BaseSelectRef } from 'rc-select';
|
||||
import type { Placement } from 'rc-select/lib/BaseSelect';
|
||||
|
@ -1,28 +1,30 @@
|
||||
'use client';
|
||||
|
||||
import type RcTree from 'rc-tree';
|
||||
import { TreeNode } from 'rc-tree';
|
||||
import type { BasicDataNode } from 'rc-tree';
|
||||
import { TreeNode } from 'rc-tree';
|
||||
import type { DataNode } from 'rc-tree/lib/interface';
|
||||
|
||||
import DirectoryTree from './DirectoryTree';
|
||||
import type { TreeProps } from './Tree';
|
||||
import TreePure from './Tree';
|
||||
import DirectoryTree from './DirectoryTree';
|
||||
|
||||
export type { DataNode };
|
||||
export type { EventDataNode } from 'rc-tree/lib/interface';
|
||||
export type {
|
||||
DirectoryTreeProps,
|
||||
ExpandAction as DirectoryTreeExpandAction,
|
||||
DirectoryTreeProps,
|
||||
} from './DirectoryTree';
|
||||
export type {
|
||||
AntdTreeNodeAttribute,
|
||||
AntTreeNode,
|
||||
AntTreeNodeCheckedEvent,
|
||||
AntTreeNodeExpandedEvent,
|
||||
AntTreeNodeMouseEvent,
|
||||
AntTreeNodeProps,
|
||||
AntTreeNodeSelectedEvent,
|
||||
AntdTreeNodeAttribute,
|
||||
TreeProps,
|
||||
} from './Tree';
|
||||
export type { DataNode };
|
||||
|
||||
type CompoundedComponent = (<T extends BasicDataNode | DataNode = DataNode>(
|
||||
props: React.PropsWithChildren<TreeProps<T>> & { ref?: React.Ref<RcTree> },
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Link from './Link';
|
||||
import Paragraph from './Paragraph';
|
||||
import Text from './Text';
|
||||
|
@ -165,8 +165,7 @@ const InternalUploadList: React.ForwardRefRenderFunction<UploadListRef, UploadLi
|
||||
const prefixCls = getPrefixCls('upload', customizePrefixCls);
|
||||
const rootPrefixCls = getPrefixCls();
|
||||
|
||||
const listClassNames = classNames({
|
||||
[`${prefixCls}-list`]: true,
|
||||
const listClassNames = classNames(`${prefixCls}-list`, {
|
||||
[`${prefixCls}-list-${listType}`]: true,
|
||||
});
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import Dragger from './Dragger';
|
||||
import type { UploadProps } from './Upload';
|
||||
import InternalUpload, { LIST_IGNORE } from './Upload';
|
||||
|
@ -129,7 +129,7 @@
|
||||
"rc-drawer": "~6.2.0",
|
||||
"rc-dropdown": "~4.1.0",
|
||||
"rc-field-form": "~1.34.0",
|
||||
"rc-image": "~7.0.0-2",
|
||||
"rc-image": "~7.0.0",
|
||||
"rc-input": "~1.1.0",
|
||||
"rc-input-number": "~8.0.0",
|
||||
"rc-mentions": "~2.5.0",
|
||||
@ -284,7 +284,7 @@
|
||||
"remark-cli": "^11.0.0",
|
||||
"remark-lint": "^9.0.0",
|
||||
"remark-preset-lint-recommended": "^6.0.0",
|
||||
"rome": "^12.0.0",
|
||||
"rome": "12.1.3-nightly.f65b0d9",
|
||||
"semver": "^7.3.5",
|
||||
"simple-git": "^3.0.0",
|
||||
"size-limit": "^8.1.0",
|
||||
@ -322,7 +322,7 @@
|
||||
"mode": "npm"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx}": "prettier --ignore-unknown --write",
|
||||
"*.{ts,tsx,js,jsx}": "rome format --write",
|
||||
"*.{json,less,md}": "prettier --ignore-unknown --write"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user