Merge master into feature

This commit is contained in:
afc163 2019-06-14 16:20:29 +08:00
commit be3226b757
No known key found for this signature in database
GPG Key ID: 738F973FCE5C6B48
62 changed files with 760 additions and 447 deletions

View File

@ -15,6 +15,41 @@ timeline: true
--- ---
## 3.19.3
`2019-06-06`
- 📝 Add FAQ for DatePicker/RangePicker with `mode` cannot be selected. [#16984](https://github.com/ant-design/ant-design/pull/16984)
- 🐞 Fix Breadcrumb validateDOMNesting warning. [#16929](https://github.com/ant-design/ant-design/pull/16929)
- 🐞 Fix Breadcrumb path error when `children` is selected. [#16885](https://github.com/ant-design/ant-design/pull/16885) [@haianweifeng](https://github.com/haianweifeng)
- 🐞 Fix InputNumber with `number` type display native spinner. [#16926](https://github.com/ant-design/ant-design/pull/16926)
- 🐞 Fix Transfer render Empty when customize without data. [#16925](https://github.com/ant-design/ant-design/pull/16925)
- 🐞 **Fix Table header extra vertical scrollbar problem.** [#16950](https://github.com/ant-design/ant-design/pull/16950)
- 🐞 Fix Table miss `border-radius` in Firefox. [#16957](https://github.com/ant-design/ant-design/pull/16957)
- 🐞 Fix Table error when `rowSelection.getCheckboxProps()` has no return value. [#15224](https://github.com/ant-design/ant-design/pull/15224)
- 🐞 Fix Table abnormal scrollbar in Chrome when using `title` and `rowSelection`.
[#16934](https://github.com/ant-design/ant-design/pull/16934)
- 🐞 Fix Divider `orientation="center"` style. [#16988](https://github.com/ant-design/ant-design/pull/16988)
- 🐞 Fix Cascader error when type space. [#16918](https://github.com/ant-design/ant-design/pull/16918) [@Durisvk](https://github.com/Durisvk)
- 🐞 Fix missing spanish translations. [#17002](https://github.com/ant-design/ant-design/pull/17002) [@morellan](https://github.com/morellan)
- TypeScript
- 🐞 Fix Upload `RcFile` definition. [#16851](https://github.com/ant-design/ant-design/pull/16851)
- ⚡️ Export `TextProps` type in Typography. [#17003](https://github.com/ant-design/ant-design/pull/17003) [@Jarvis1010](https://github.com/Jarvis1010)
## 3.19.2
`2019-06-01`
- 🐞 Fix Tabs vertical card mode not scrollable. [#16825](https://github.com/ant-design/ant-design/pull/16825)
- 🐞 Fix Transfer warn `setStart` on an unmounted component. [#16822](https://github.com/ant-design/ant-design/pull/16822) [@shiningjason](https://github.com/shiningjason)
- 💄 Using less variables `@error-color`, `@warning-color` instead of `@text-color-danger`, `@text-color-warning`. [#16890](https://github.com/ant-design/ant-design/pull/16890) [@MrHeer](https://github.com/MrHeer)
- 💄 Add warning if Menu use `inlineCollapsed` under Sider. [#16826](https://github.com/ant-design/ant-design/pull/16826)
- TypeScript
- ⚡️ Add `forceSubmenuRender` into MenuProps. [#16827](https://github.com/ant-design/ant-design/pull/16827)
- ⚡️ Export `TypographyProps` type. [#16835](https://github.com/ant-design/ant-design/pull/16835)
- ⚡️ Add `onChange` prop type definition to Steps. [#16845](https://github.com/ant-design/ant-design/pull/16845) [@JonathanLee-LX](https://github.com/JonathanLee-LX)
- ⚡️ Add `webkitRelativePath` prop type definition to Upload. [#16850](https://github.com/ant-design/ant-design/pull/16850) [@DiamondYuan](https://github.com/DiamondYuan)
## 3.19.1 ## 3.19.1
`2019-05-27` `2019-05-27`

View File

@ -15,6 +15,40 @@ timeline: true
--- ---
## 3.19.3
`2019-06-06`
- 📝 增加 DatePicker/RangePicker 指定 `mode` 后无法选择的文档说明。[#16984](https://github.com/ant-design/ant-design/pull/16984)
- 🐞 修复 Breadcrumb 的 `validateDOMNesting` 警告信息。[#16929](https://github.com/ant-design/ant-design/pull/16929)
- 🐞 修复 Breadcrumb 选中子路由时浏览器路径问题。[#16885](https://github.com/ant-design/ant-design/pull/16885) [@haianweifeng](https://github.com/haianweifeng)
- 🐞 修复 InputNumber 设置 `number` 类型时会展示原生按钮的问题。[#16926](https://github.com/ant-design/ant-design/pull/16926)
- 🐞 修复 Transfer 在自定义列表为空时展示 Empty 样式。[#16925](https://github.com/ant-design/ant-design/pull/16925)
- 🐞 **修复 Table 头部多余的垂直滚动条样式。**[#16950](https://github.com/ant-design/ant-design/pull/16950)
- 🐞 修复 Table 的 `rowSelection.getCheckboxProps()` 在没有返回值时报错的问题。[#15224](https://github.com/ant-design/ant-design/pull/15224)
- 🐞 修复 Firefox 的 Table 丢失 `border-radius` 样式问题。[#16957](https://github.com/ant-design/ant-design/pull/16957)
- 🐞 修复 Table 当 `title``rowSelection` 同时指定时在 Chrome 下滚动条异常的问题。[#16934](https://github.com/ant-design/ant-design/pull/16934)
- 🐞 修复 Divider `orientation="center"` 时样式错位的问题。[#16988](https://github.com/ant-design/ant-design/pull/16988)
- 🐞 修复 Cascader 搜索时不支持空格输入的问题。[#16918](https://github.com/ant-design/ant-design/pull/16918) [@Durisvk](https://github.com/Durisvk)
- 🐞 修复部分组件的西班牙语言翻译。[#17002](https://github.com/ant-design/ant-design/pull/17002) [@morellan](https://github.com/morellan)
- TypeScript
- 🐞 修复 Upload 的 `RcFile` 类型定义。[#16851](https://github.com/ant-design/ant-design/pull/16851)
- ⚡️ 导出 Typography 中 `TextProps` 的类型定义。[#17003](https://github.com/ant-design/ant-design/pull/17003) [@Jarvis1010](https://github.com/Jarvis1010)
## 3.19.2
`2019-06-01`
- 🐞 修复 Tabs 在垂直卡片模式下标签不能滚动的问题。[#16825](https://github.com/ant-design/ant-design/pull/16825)
- 🐞 修复 Transfer 组件在 unmount 时 `setState` 警告。[#16822](https://github.com/ant-design/ant-design/pull/16822) [@shiningjason](https://github.com/shiningjason)
- 💄 使用 Less 变量 `@error-color`、`@warning-color` 代替 `@text-color-danger`、`@text-color-warning`。[#16890](https://github.com/ant-design/ant-design/pull/16890) [@MrHeer](https://github.com/MrHeer)
- 💄 增加在 Sider 内 Menu 使用 `inlineCollapsed` 时的提示信息。[#16826](https://github.com/ant-design/ant-design/pull/16826)
- TypeScript
- ⚡️ 增加 Menu 中 `forceSubMenuRender` 类型定义。[#16827](https://github.com/ant-design/ant-design/pull/16827)
- ⚡️ 导出 Typography 类型定义。[#16835](https://github.com/ant-design/ant-design/pull/16835)
- ⚡️ 增加 Steps 中的 `onChange` 类型定义。[#16845](https://github.com/ant-design/ant-design/pull/16845) [@JonathanLee-LX](https://github.com/JonathanLee-LX)
- ⚡️ 增加 Upload 中 `webkitRelativePath` 类型定义。[#16850](https://github.com/ant-design/ant-design/pull/16850) [@DiamondYuan](https://github.com/DiamondYuan)
## 3.19.1 ## 3.19.1
`2019-05-27` `2019-05-27`

View File

@ -443,6 +443,7 @@ exports[`renders ./components/auto-complete/demo/uncertain-category.md correctly
> >
<button <button
class="ant-btn search-btn ant-btn-primary ant-btn-lg" class="ant-btn search-btn ant-btn-primary ant-btn-lg"
style="margin-right:-12px"
type="button" type="button"
> >
<i <i

View File

@ -20,7 +20,7 @@ const { Option, OptGroup } = AutoComplete;
const dataSource = [ const dataSource = [
{ {
title: '话题', title: 'Libraries',
children: [ children: [
{ {
title: 'AntDesign', title: 'AntDesign',
@ -33,23 +33,23 @@ const dataSource = [
], ],
}, },
{ {
title: '问题', title: 'Solutions',
children: [ children: [
{ {
title: 'AntDesign UI 有多好', title: 'AntDesign UI',
count: 60100, count: 60100,
}, },
{ {
title: 'AntDesign 是啥', title: 'AntDesign',
count: 30010, count: 30010,
}, },
], ],
}, },
{ {
title: '文章', title: 'Articles',
children: [ children: [
{ {
title: 'AntDesign 是一个设计语言', title: 'AntDesign design language',
count: 100000, count: 100000,
}, },
], ],
@ -66,7 +66,7 @@ function renderTitle(title) {
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
更多 more
</a> </a>
</span> </span>
); );
@ -78,7 +78,7 @@ const options = dataSource
{group.children.map(opt => ( {group.children.map(opt => (
<Option key={opt.title} value={opt.title}> <Option key={opt.title} value={opt.title}>
{opt.title} {opt.title}
<span className="certain-search-item-count">{opt.count} 人 关注</span> <span className="certain-search-item-count">{opt.count} people</span>
</Option> </Option>
))} ))}
</OptGroup> </OptGroup>
@ -86,7 +86,7 @@ const options = dataSource
.concat([ .concat([
<Option disabled key="all" className="show-all"> <Option disabled key="all" className="show-all">
<a href="https://www.google.com/search?q=antd" target="_blank" rel="noopener noreferrer"> <a href="https://www.google.com/search?q=antd" target="_blank" rel="noopener noreferrer">
查看所有结果 View all results
</a> </a>
</Option>, </Option>,
]); ]);

View File

@ -42,7 +42,7 @@ function renderOption(item) {
<Option key={item.category} text={item.category}> <Option key={item.category} text={item.category}>
<div className="global-search-item"> <div className="global-search-item">
<span className="global-search-item-desc"> <span className="global-search-item-desc">
{item.query} 在 Found {item.query} on
<a <a
href={`https://s.taobao.com/search?q=${item.query}`} href={`https://s.taobao.com/search?q=${item.query}`}
target="_blank" target="_blank"
@ -50,9 +50,8 @@ function renderOption(item) {
> >
{item.category} {item.category}
</a> </a>
区块中
</span> </span>
<span className="global-search-item-count">约 {item.count} 个结果</span> <span className="global-search-item-count">{item.count} results</span>
</div> </div>
</Option> </Option>
); );
@ -85,7 +84,12 @@ class Complete extends React.Component {
> >
<Input <Input
suffix={ suffix={
<Button className="search-btn" size="large" type="primary"> <Button
className="search-btn"
style={{ marginRight: -12 }}
size="large"
type="primary"
>
<Icon type="search" /> <Icon type="search" />
</Button> </Button>
} }
@ -116,10 +120,6 @@ ReactDOM.render(<Complete />, mountNode);
padding-right: 62px; padding-right: 62px;
} }
.global-search.ant-select-auto-complete .ant-input-affix-wrapper .ant-input-suffix {
right: 0;
}
.global-search.ant-select-auto-complete .ant-input-affix-wrapper .ant-input-suffix button { .global-search.ant-select-auto-complete .ant-input-affix-wrapper .ant-input-suffix button {
border-top-left-radius: 0; border-top-left-radius: 0;
border-bottom-left-radius: 0; border-bottom-left-radius: 0;

View File

@ -31,6 +31,7 @@ const dataSource = ['12345', '23456', '34567'];
| defaultValue | 指定默认选中的条目 | string\|string\[]\| 无 | | defaultValue | 指定默认选中的条目 | string\|string\[]\| 无 |
| disabled | 是否禁用 | boolean | false | | disabled | 是否禁用 | boolean | false |
| filterOption | 是否根据输入项进行筛选。当其为一个函数时,会接收 `inputValue` `option` 两个参数,当 `option` 符合筛选条件时,应返回 `true`,反之则返回 `false`。 | boolean or function(inputValue, option) | true | | filterOption | 是否根据输入项进行筛选。当其为一个函数时,会接收 `inputValue` `option` 两个参数,当 `option` 符合筛选条件时,应返回 `true`,反之则返回 `false`。 | boolean or function(inputValue, option) | true |
| getPopupContainer | 菜单渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位。[示例](https://codesandbox.io/s/4j168r7jw0) | Function(triggerNode) | () => document.body |
| optionLabelProp | 回填到选择框的 Option 的属性值,默认是 Option 的子元素。比如在子元素需要高亮效果时,此值可以设为 `value`。 | string | `children` | | optionLabelProp | 回填到选择框的 Option 的属性值,默认是 Option 的子元素。比如在子元素需要高亮效果时,此值可以设为 `value`。 | string | `children` |
| placeholder | 输入框提示 | string | - | | placeholder | 输入框提示 | string | - |
| value | 指定当前选中的条目 | string\|string\[]\|{ key: string, label: string\|ReactNode }\|Array&lt;{ key: string, label: string\|ReactNode }> | 无 | | value | 指定当前选中的条目 | string\|string\[]\|{ key: string, label: string\|ReactNode }\|Array&lt;{ key: string, label: string\|ReactNode }> | 无 |

View File

@ -70,6 +70,24 @@ export default class Breadcrumb extends React.Component<BreadcrumbProps, any> {
'see: https://u.ant.design/item-render.', 'see: https://u.ant.design/item-render.',
); );
} }
getPath = (path: string, params: any) => {
path = (path || '').replace(/^\//, '');
Object.keys(params).forEach(key => {
path = path.replace(`:${key}`, params[key]);
});
return path;
}
addChildPath = (paths: string[], childPath: string = '', params: any) => {
const originalPaths = [...paths];
const path = this.getPath(childPath, params);
if (path) {
originalPaths.push(path);
}
return originalPaths;
}
genForRoutes = ({ genForRoutes = ({
routes = [], routes = [],
params = {}, params = {},
@ -78,11 +96,7 @@ export default class Breadcrumb extends React.Component<BreadcrumbProps, any> {
}: BreadcrumbProps) => { }: BreadcrumbProps) => {
const paths: string[] = []; const paths: string[] = [];
return routes.map(route => { return routes.map(route => {
route.path = route.path || ''; const path = this.getPath(route.path, params);
let path = route.path.replace(/^\//, '');
Object.keys(params).forEach(key => {
path = path.replace(`:${key}`, params[key]);
});
if (path) { if (path) {
paths.push(path); paths.push(path);
@ -93,10 +107,12 @@ export default class Breadcrumb extends React.Component<BreadcrumbProps, any> {
overlay = ( overlay = (
<Menu> <Menu>
{route.children.map(child => ( {route.children.map(child => (
<Menu.Item key={child.breadcrumbName || child.path}> <Menu.Item key={child.breadcrumbName || child.path}>
{itemRender(child, params, routes, paths)} {
</Menu.Item> itemRender(child, params, routes, this.addChildPath(paths, child.path, params))
))} }
</Menu.Item>
))}
</Menu> </Menu>
); );
} }

View File

@ -71,10 +71,10 @@ export default class BreadcrumbItem extends React.Component<BreadcrumbItemProps,
if (overlay) { if (overlay) {
return ( return (
<DropDown overlay={overlay} placement="bottomCenter"> <DropDown overlay={overlay} placement="bottomCenter">
<a className={`${prefixCls}-overlay-link`}> <span className={`${prefixCls}-overlay-link`}>
{breadcrumbItem} {breadcrumbItem}
<Icon type="down" /> <Icon type="down" />
</a> </span>
</DropDown> </DropDown>
); );
} }

View File

@ -71,42 +71,43 @@ exports[`Breadcrumb should render a menu 1`] = `
</span> </span>
</span> </span>
<span> <span>
<a <span
class="ant-breadcrumb-overlay-link ant-dropdown-trigger" class="ant-breadcrumb-overlay-link ant-dropdown-trigger"
> >
<span <span
class="ant-breadcrumb-link" class="ant-breadcrumb-link"
/> >
</a> <a
<a href="#/index/first"
href="#/index/first" >
first
</a>
</span>
<i
aria-label="icon: down"
class="anticon anticon-down"
>
<svg
aria-hidden="true"
class=""
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>
</i>
</span>
<span
class="ant-breadcrumb-separator"
> >
first /
</a> </span>
</span>
<i
aria-label="icon: down"
class="anticon anticon-down"
>
<svg
aria-hidden="true"
class=""
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>
</i>
<span
class="ant-breadcrumb-separator"
>
/
</span> </span>
<span> <span>
<span <span

View File

@ -64,89 +64,88 @@ exports[`renders ./components/breadcrumb/demo/basic.md correctly 1`] = `
`; `;
exports[`renders ./components/breadcrumb/demo/overlay.md correctly 1`] = ` exports[`renders ./components/breadcrumb/demo/overlay.md correctly 1`] = `
<div> <div
<div class="ant-breadcrumb"
class="ant-breadcrumb" >
> <span>
<span> <span
<span class="ant-breadcrumb-link"
class="ant-breadcrumb-link" >
> Ant Design
Ant Design
</span>
<span
class="ant-breadcrumb-separator"
>
/
</span>
</span> </span>
<span> <span
class="ant-breadcrumb-separator"
>
/
</span>
</span>
<span>
<span
class="ant-breadcrumb-link"
>
<a
href=""
>
Component
</a>
</span>
<span
class="ant-breadcrumb-separator"
>
/
</span>
</span>
<span>
<span
class="ant-breadcrumb-overlay-link ant-dropdown-trigger"
>
<span <span
class="ant-breadcrumb-link" class="ant-breadcrumb-link"
> >
<a <a
href="" href=""
> >
Component General
</a> </a>
</span> </span>
<span <i
class="ant-breadcrumb-separator" aria-label="icon: down"
class="anticon anticon-down"
> >
/ <svg
</span> aria-hidden="true"
class=""
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>
</i>
</span> </span>
<span>
<a
class="ant-breadcrumb-overlay-link ant-dropdown-trigger"
>
<span
class="ant-breadcrumb-link"
/>
</a>
<a
href=""
>
General
</a>
</span>
<i
aria-label="icon: down"
class="anticon anticon-down"
>
<svg
aria-hidden="true"
class=""
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>
</i>
<span <span
class="ant-breadcrumb-separator" class="ant-breadcrumb-separator"
> >
/ /
</span> </span>
<span> </span>
<span <span>
class="ant-breadcrumb-link" <span
> class="ant-breadcrumb-link"
Button >
</span> Button
<span
class="ant-breadcrumb-separator"
>
/
</span>
</span> </span>
</div> <span
class="ant-breadcrumb-separator"
>
/
</span>
</span>
</div> </div>
`; `;

View File

@ -37,18 +37,16 @@ const menu = (
); );
ReactDOM.render( ReactDOM.render(
<div> <Breadcrumb>
<Breadcrumb> <Breadcrumb.Item>Ant Design</Breadcrumb.Item>
<Breadcrumb.Item>Ant Design</Breadcrumb.Item> <Breadcrumb.Item>
<Breadcrumb.Item> <a href="">Component</a>
<a href="">Component</a> </Breadcrumb.Item>
</Breadcrumb.Item> <Breadcrumb.Item overlay={menu}>
<Breadcrumb.Item overlay={menu}> <a href="">General</a>
<a href="">General</a> </Breadcrumb.Item>
</Breadcrumb.Item> <Breadcrumb.Item>Button</Breadcrumb.Item>
<Breadcrumb.Item>Button</Breadcrumb.Item> </Breadcrumb>,
</Breadcrumb>
</div>,
mountNode, mountNode,
); );
``` ```

View File

@ -7,11 +7,11 @@ title:
## zh-CN ## zh-CN
按钮有种类型:主按钮、次按钮、虚线按钮、危险按钮。主按钮在同一个操作区域最多出现一次。 按钮有种类型:主按钮、次按钮、虚线按钮、危险按钮和链接按钮。主按钮在同一个操作区域最多出现一次。
## en-US ## en-US
There are `primary` button, `default` button, `dashed` button and `danger` button in antd. There are `primary` button, `default` button, `dashed` button, `danger` button and `link` button in antd.
```jsx ```jsx
import { Button } from 'antd'; import { Button } from 'antd';

View File

@ -292,7 +292,8 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
}; };
handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => { handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.keyCode === KeyCode.BACKSPACE) { // SPACE => https://github.com/ant-design/ant-design/issues/16871
if (e.keyCode === KeyCode.BACKSPACE || e.keyCode === KeyCode.SPACE) {
e.stopPropagation(); e.stopPropagation();
} }
}; };

View File

@ -175,7 +175,7 @@
// 半选状态 // 半选状态
.@{checkbox-prefix-cls}-indeterminate { .@{checkbox-prefix-cls}-indeterminate {
.@{checkbox-inner-prefix-cls} { .@{checkbox-inner-prefix-cls} {
background-color: #fff; background-color: @component-background;
border-color: @border-color-base; border-color: @border-color-base;
} }
.@{checkbox-inner-prefix-cls}::after { .@{checkbox-inner-prefix-cls}::after {

View File

@ -37,9 +37,7 @@
top: 50%; top: 50%;
left: @padding-md; left: @padding-md;
display: inline-block; display: inline-block;
margin-top: 2px;
font-size: @font-size-sm; font-size: @font-size-sm;
line-height: 46px;
transform: translateY(-50%); transform: translateY(-50%);
& svg { & svg {

View File

@ -27,25 +27,25 @@
position: relative; position: relative;
flex: 1 1 auto; flex: 1 1 auto;
min-width: 1px; min-width: 1px;
font-size: 14px; font-size: @comment-font-size-base;
word-wrap: break-word; word-wrap: break-word;
&-author { &-author {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
margin-bottom: 4px; margin-bottom: 4px;
font-size: 14px; font-size: @comment-font-size-base;
& > a, & > a,
& > span { & > span {
height: 18px; height: 18px;
padding-right: 8px; padding-right: 8px;
font-size: 12px; font-size: @comment-font-size-sm;
line-height: 18px; line-height: 18px;
} }
&-name { &-name {
color: @comment-author-name-color; color: @comment-author-name-color;
font-size: 14px; font-size: @comment-font-size-base;
transition: color 0.3s; transition: color 0.3s;
> * { > * {
color: @comment-author-name-color; color: @comment-author-name-color;
@ -76,7 +76,7 @@
> span { > span {
padding-right: 10px; padding-right: 10px;
color: @comment-action-color; color: @comment-action-color;
font-size: 12px; font-size: @comment-font-size-sm;
cursor: pointer; cursor: pointer;
transition: color 0.3s; transition: color 0.3s;
user-select: none; user-select: none;

View File

@ -8175,6 +8175,7 @@ exports[`ConfigProvider components Modal configProvider 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="config-modal-close" class="config-modal-close"
type="button"
> >
<span <span
class="config-modal-close-x" class="config-modal-close-x"
@ -8266,6 +8267,7 @@ exports[`ConfigProvider components Modal normal 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -8357,6 +8359,7 @@ exports[`ConfigProvider components Modal prefixCls 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="prefix-Modal-close" class="prefix-Modal-close"
type="button"
> >
<span <span
class="prefix-Modal-close-x" class="prefix-Modal-close-x"

View File

@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import createReactContext, { Context } from '@ant-design/create-react-context'; import createReactContext from '@ant-design/create-react-context';
import defaultRenderEmpty, { RenderEmptyHandler } from './renderEmpty'; import defaultRenderEmpty, { RenderEmptyHandler } from './renderEmpty';
@ -36,7 +36,7 @@ export interface ConfigProviderProps {
autoInsertSpaceInButton?: boolean; autoInsertSpaceInButton?: boolean;
} }
const ConfigContext: Context<ConfigConsumerProps | null> = createReactContext({ const ConfigContext = createReactContext<ConfigConsumerProps>({
// We provide a default function for Context without provider // We provide a default function for Context without provider
getPrefixCls: (suffixCls: string, customizePrefixCls?: string) => { getPrefixCls: (suffixCls: string, customizePrefixCls?: string) => {
if (customizePrefixCls) return customizePrefixCls; if (customizePrefixCls) return customizePrefixCls;

View File

@ -135,3 +135,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
margin: 0 8px 12px 0; margin: 0 8px 12px 0;
} }
</style> </style>
## FAQ
- [When set mode to DatePicker/RangePicker, cannot select year or month anymore?](/docs/react/faq#When-set-mode-to-DatePicker/RangePicker,-cannot-select-year-or-month-anymore?)

View File

@ -138,3 +138,7 @@ moment.locale('zh-cn');
margin: 0 8px 12px 0; margin: 0 8px 12px 0;
} }
</style> </style>
## FAQ
- [当我指定了 DatePicker/RangePicker 的 `mode` 属性后,点击后无法选择年份/月份?](/docs/react/faq-cn#当我指定了-DatePicker/RangePicker-的-mode-属性后,点击后无法选择年份/月份?)

View File

@ -11,6 +11,10 @@ const locale = {
timePickerLocale: { timePickerLocale: {
...TimePickerLocale, ...TimePickerLocale,
}, },
dateFormat: 'DD-MM-YYYY',
monthFormat: 'MM-YYYY',
dateTimeFormat: 'DD-MM-YYYY HH:mm:ss',
weekFormat: 'wo-YYYY',
}; };
// All settings at: // All settings at:

View File

@ -12,7 +12,7 @@ exports[`renders ./components/divider/demo/horizontal.md correctly 1`] = `
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi ista probare, quae sunt a te dicta? Refert tamen, quo modo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi ista probare, quae sunt a te dicta? Refert tamen, quo modo.
</p> </p>
<div <div
class="ant-divider ant-divider-horizontal ant-divider-with-text" class="ant-divider ant-divider-horizontal ant-divider-with-text-center"
> >
<span <span
class="ant-divider-inner-text" class="ant-divider-inner-text"

View File

@ -5,7 +5,7 @@ import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
export interface DividerProps { export interface DividerProps {
prefixCls?: string; prefixCls?: string;
type?: 'horizontal' | 'vertical'; type?: 'horizontal' | 'vertical';
orientation?: 'left' | 'right' | ''; orientation?: 'left' | 'right' | 'center';
className?: string; className?: string;
children?: React.ReactNode; children?: React.ReactNode;
dashed?: boolean; dashed?: boolean;
@ -18,7 +18,7 @@ const Divider: React.SFC<DividerProps> = props => (
const { const {
prefixCls: customizePrefixCls, prefixCls: customizePrefixCls,
type = 'horizontal', type = 'horizontal',
orientation = '', orientation = 'center',
className, className,
children, children,
dashed, dashed,

View File

@ -18,6 +18,7 @@
margin: 0 8px; margin: 0 8px;
vertical-align: middle; vertical-align: middle;
} }
&-horizontal { &-horizontal {
display: block; display: block;
clear: both; clear: both;
@ -27,7 +28,7 @@
margin: 24px 0; margin: 24px 0;
} }
&-horizontal&-with-text, &-horizontal&-with-text-center,
&-horizontal&-with-text-left, &-horizontal&-with-text-left,
&-horizontal&-with-text-right { &-horizontal&-with-text-right {
display: table; display: table;
@ -89,7 +90,7 @@
background: none; background: none;
border-top: 1px dashed @border-color-split; border-top: 1px dashed @border-color-split;
} }
&-horizontal&-with-text&-dashed, &-horizontal&-with-text-center&-dashed,
&-horizontal&-with-text-left&-dashed, &-horizontal&-with-text-left&-dashed,
&-horizontal&-with-text-right&-dashed { &-horizontal&-with-text-right&-dashed {
border-top: 0; border-top: 0;

View File

@ -1,14 +1,14 @@
import * as React from 'react'; import * as React from 'react';
import * as PropTypes from 'prop-types'; import * as PropTypes from 'prop-types';
import RcDrawer from 'rc-drawer'; import RcDrawer from 'rc-drawer';
import createReactContext, { Context } from '@ant-design/create-react-context'; import createReactContext from '@ant-design/create-react-context';
import warning from '../_util/warning'; import warning from '../_util/warning';
import classNames from 'classnames'; import classNames from 'classnames';
import Icon from '../icon'; import Icon from '../icon';
import { withConfigConsumer, ConfigConsumerProps } from '../config-provider'; import { withConfigConsumer, ConfigConsumerProps } from '../config-provider';
import { tuple } from '../_util/type'; import { tuple } from '../_util/type';
const DrawerContext: Context<Drawer | null> = createReactContext(null); const DrawerContext = createReactContext<Drawer | null>(null);
type EventType = React.MouseEvent<HTMLDivElement> | React.MouseEvent<HTMLButtonElement>; type EventType = React.MouseEvent<HTMLDivElement> | React.MouseEvent<HTMLButtonElement>;

View File

@ -102,7 +102,7 @@
&-selected, &-selected,
&-selected > a { &-selected > a {
color: @primary-color; color: @dropdown-selected-color;
background-color: @item-active-bg; background-color: @item-active-bg;
} }

View File

@ -1,4 +1,4 @@
import createReactContext, { Context } from '@ant-design/create-react-context'; import createReactContext from '@ant-design/create-react-context';
import { ColProps } from '../grid/col'; import { ColProps } from '../grid/col';
import { FormLabelAlign } from './FormItem'; import { FormLabelAlign } from './FormItem';
@ -10,7 +10,7 @@ export interface FormContextProps {
wrapperCol?: ColProps; wrapperCol?: ColProps;
} }
export const FormContext: Context<FormContextProps> = createReactContext({ export const FormContext = createReactContext<FormContextProps>({
labelAlign: 'right', labelAlign: 'right',
vertical: false, vertical: false,
}); });

View File

@ -77,8 +77,14 @@
border-radius: @border-radius-base; border-radius: @border-radius-base;
outline: 0; outline: 0;
transition: all 0.3s linear; transition: all 0.3s linear;
-moz-appearance: textfield; -moz-appearance: textfield !important;
.placeholder(); .placeholder();
&[type='number']::-webkit-inner-spin-button,
&[type='number']::-webkit-outer-spin-button {
margin: 0;
-webkit-appearance: none;
}
} }
&-lg { &-lg {

View File

@ -8,11 +8,13 @@
height: @input-height-lg; height: @input-height-lg;
padding: @input-padding-vertical-lg @input-padding-horizontal-lg; padding: @input-padding-vertical-lg @input-padding-horizontal-lg;
font-size: @font-size-lg; font-size: @font-size-lg;
line-height: @input-height-lg;
} }
.input-sm() { .input-sm() {
height: @input-height-sm; height: @input-height-sm;
padding: @input-padding-vertical-sm @input-padding-horizontal-sm; padding: @input-padding-vertical-sm @input-padding-horizontal-sm;
line-height: @input-height-sm;
} }
// input status // input status
@ -49,7 +51,7 @@
padding: @input-padding-vertical-base @input-padding-horizontal-base; padding: @input-padding-vertical-base @input-padding-horizontal-base;
color: @input-color; color: @input-color;
font-size: @font-size-base; font-size: @font-size-base;
line-height: @line-height-base; line-height: @input-height-base;
background-color: @input-bg; background-color: @input-bg;
background-image: none; background-image: none;
border: @border-width-base @border-style-base @input-border-color; border: @border-width-base @border-style-base @input-border-color;

View File

@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import createContext, { Context } from '@ant-design/create-react-context'; import createContext from '@ant-design/create-react-context';
import { SiderProps } from './Sider'; import { SiderProps } from './Sider';
import { ConfigConsumer, ConfigConsumerProps } from '../config-provider'; import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
@ -19,7 +19,7 @@ export interface LayoutContextProps {
removeSider: (id: string) => void; removeSider: (id: string) => void;
}; };
} }
export const LayoutContext: Context<LayoutContextProps> = createContext({ export const LayoutContext = createContext<LayoutContextProps>({
siderHook: { siderHook: {
addSider: () => null, addSider: () => null,
removeSider: () => null, removeSider: () => null,

View File

@ -7523,6 +7523,7 @@ exports[`Locale Provider should display the text as ar 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -12626,6 +12627,7 @@ exports[`Locale Provider should display the text as bg 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -17729,6 +17731,7 @@ exports[`Locale Provider should display the text as ca 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -22832,6 +22835,7 @@ exports[`Locale Provider should display the text as cs 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -27935,6 +27939,7 @@ exports[`Locale Provider should display the text as da 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -33038,6 +33043,7 @@ exports[`Locale Provider should display the text as de 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -38141,6 +38147,7 @@ exports[`Locale Provider should display the text as el 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -43244,6 +43251,7 @@ exports[`Locale Provider should display the text as en 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -48347,6 +48355,7 @@ exports[`Locale Provider should display the text as en-gb 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -48438,7 +48447,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-pagination-item-link" class="ant-pagination-item-link"
> >
<i <i
aria-label="icon: left" aria-label="ícono: left"
class="anticon anticon-left" class="anticon anticon-left"
> >
<svg <svg
@ -48513,7 +48522,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-pagination-item-link" class="ant-pagination-item-link"
> >
<i <i
aria-label="icon: right" aria-label="ícono: right"
class="anticon anticon-right" class="anticon anticon-right"
> >
<svg <svg
@ -48566,7 +48575,7 @@ exports[`Locale Provider should display the text as es 1`] = `
unselectable="on" unselectable="on"
> >
<i <i
aria-label="icon: down" aria-label="ícono: down"
class="anticon anticon-down ant-select-arrow-icon" class="anticon anticon-down ant-select-arrow-icon"
> >
<svg <svg
@ -48632,7 +48641,7 @@ exports[`Locale Provider should display the text as es 1`] = `
unselectable="on" unselectable="on"
> >
<i <i
aria-label="icon: down" aria-label="ícono: down"
class="anticon anticon-down ant-select-arrow-icon" class="anticon anticon-down ant-select-arrow-icon"
> >
<svg <svg
@ -48666,7 +48675,7 @@ exports[`Locale Provider should display the text as es 1`] = `
value="" value=""
/> />
<i <i
aria-label="icon: calendar" aria-label="ícono: calendar"
class="anticon anticon-calendar ant-calendar-picker-icon" class="anticon anticon-calendar ant-calendar-picker-icon"
> >
<svg <svg
@ -49475,7 +49484,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-time-picker-icon" class="ant-time-picker-icon"
> >
<i <i
aria-label="icon: clock-circle" aria-label="ícono: clock-circle"
class="anticon anticon-clock-circle ant-time-picker-clock-icon" class="anticon anticon-clock-circle ant-time-picker-clock-icon"
> >
<svg <svg
@ -50433,7 +50442,7 @@ exports[`Locale Provider should display the text as es 1`] = `
value="" value=""
/> />
<i <i
aria-label="icon: calendar" aria-label="ícono: calendar"
class="anticon anticon-calendar ant-calendar-picker-icon" class="anticon anticon-calendar ant-calendar-picker-icon"
> >
<svg <svg
@ -51968,7 +51977,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-popover-message" class="ant-popover-message"
> >
<i <i
aria-label="icon: exclamation-circle" aria-label="ícono: exclamation-circle"
class="anticon anticon-exclamation-circle" class="anticon anticon-exclamation-circle"
> >
<svg <svg
@ -52071,7 +52080,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-transfer-list-search-action" class="ant-transfer-list-search-action"
> >
<i <i
aria-label="icon: search" aria-label="ícono: search"
class="anticon anticon-search" class="anticon anticon-search"
> >
<svg <svg
@ -52124,7 +52133,7 @@ exports[`Locale Provider should display the text as es 1`] = `
type="button" type="button"
> >
<i <i
aria-label="icon: right" aria-label="ícono: right"
class="anticon anticon-right" class="anticon anticon-right"
> >
<svg <svg
@ -52149,7 +52158,7 @@ exports[`Locale Provider should display the text as es 1`] = `
type="button" type="button"
> >
<i <i
aria-label="icon: left" aria-label="ícono: left"
class="anticon anticon-left" class="anticon anticon-left"
> >
<svg <svg
@ -52219,7 +52228,7 @@ exports[`Locale Provider should display the text as es 1`] = `
class="ant-transfer-list-search-action" class="ant-transfer-list-search-action"
> >
<i <i
aria-label="icon: search" aria-label="ícono: search"
class="anticon anticon-search" class="anticon anticon-search"
> >
<svg <svg
@ -52300,7 +52309,7 @@ exports[`Locale Provider should display the text as es 1`] = `
unselectable="on" unselectable="on"
> >
<i <i
aria-label="icon: down" aria-label="ícono: down"
class="anticon anticon-down ant-select-arrow-icon" class="anticon anticon-down ant-select-arrow-icon"
> >
<svg <svg
@ -52351,7 +52360,7 @@ exports[`Locale Provider should display the text as es 1`] = `
unselectable="on" unselectable="on"
> >
<i <i
aria-label="icon: down" aria-label="ícono: down"
class="anticon anticon-down ant-select-arrow-icon" class="anticon anticon-down ant-select-arrow-icon"
> >
<svg <svg
@ -53352,7 +53361,7 @@ exports[`Locale Provider should display the text as es 1`] = `
</div> </div>
</span> </span>
<i <i
aria-label="icon: filter" aria-label="ícono: filter"
class="anticon anticon-filter ant-dropdown-trigger" class="anticon anticon-filter ant-dropdown-trigger"
tabindex="-1" tabindex="-1"
title="Filtrar menú" title="Filtrar menú"
@ -53450,12 +53459,13 @@ exports[`Locale Provider should display the text as es 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
> >
<i <i
aria-label="icon: close" aria-label="ícono: close"
class="anticon anticon-close ant-modal-close-icon" class="anticon anticon-close ant-modal-close-icon"
> >
<svg <svg
@ -58553,6 +58563,7 @@ exports[`Locale Provider should display the text as et 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -63656,6 +63667,7 @@ exports[`Locale Provider should display the text as fa 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -68759,6 +68771,7 @@ exports[`Locale Provider should display the text as fi 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -73862,6 +73875,7 @@ exports[`Locale Provider should display the text as fr 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -78965,6 +78979,7 @@ exports[`Locale Provider should display the text as fr 2`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -84068,6 +84083,7 @@ exports[`Locale Provider should display the text as he 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -89171,6 +89187,7 @@ exports[`Locale Provider should display the text as hi 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -94274,6 +94291,7 @@ exports[`Locale Provider should display the text as hr 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -99377,6 +99395,7 @@ exports[`Locale Provider should display the text as hu 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -104480,6 +104499,7 @@ exports[`Locale Provider should display the text as id 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -109583,6 +109603,7 @@ exports[`Locale Provider should display the text as is 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -114686,6 +114707,7 @@ exports[`Locale Provider should display the text as it 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -119789,6 +119811,7 @@ exports[`Locale Provider should display the text as ja 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -124892,6 +124915,7 @@ exports[`Locale Provider should display the text as kn 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -129995,6 +130019,7 @@ exports[`Locale Provider should display the text as ko 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -135098,6 +135123,7 @@ exports[`Locale Provider should display the text as ku-iq 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -140201,6 +140227,7 @@ exports[`Locale Provider should display the text as mn-mn 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -145304,6 +145331,7 @@ exports[`Locale Provider should display the text as nb 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -150407,6 +150435,7 @@ exports[`Locale Provider should display the text as ne-np 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -155510,6 +155539,7 @@ exports[`Locale Provider should display the text as nl 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -160613,6 +160643,7 @@ exports[`Locale Provider should display the text as nl-be 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -165716,6 +165747,7 @@ exports[`Locale Provider should display the text as pl 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -170819,6 +170851,7 @@ exports[`Locale Provider should display the text as pt 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -175922,6 +175955,7 @@ exports[`Locale Provider should display the text as pt-br 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -181025,6 +181059,7 @@ exports[`Locale Provider should display the text as ru 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -186128,6 +186163,7 @@ exports[`Locale Provider should display the text as sk 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -191231,6 +191267,7 @@ exports[`Locale Provider should display the text as sl 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -196334,6 +196371,7 @@ exports[`Locale Provider should display the text as sr 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -201437,6 +201475,7 @@ exports[`Locale Provider should display the text as sv 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -206540,6 +206579,7 @@ exports[`Locale Provider should display the text as th 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -211643,6 +211683,7 @@ exports[`Locale Provider should display the text as tr 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -216746,6 +216787,7 @@ exports[`Locale Provider should display the text as uk 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -221849,6 +221891,7 @@ exports[`Locale Provider should display the text as vi 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -226952,6 +226995,7 @@ exports[`Locale Provider should display the text as zh-cn 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -232055,6 +232099,7 @@ exports[`Locale Provider should display the text as zh-tw 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"

View File

@ -9,12 +9,16 @@ export default {
DatePicker, DatePicker,
TimePicker, TimePicker,
Calendar, Calendar,
global: {
placeholder: 'Seleccione',
},
Table: { Table: {
filterTitle: 'Filtrar menú', filterTitle: 'Filtrar menú',
filterConfirm: 'Aceptar', filterConfirm: 'Aceptar',
filterReset: 'Reiniciar', filterReset: 'Reiniciar',
selectAll: 'Seleccionar todo', selectAll: 'Seleccionar todo',
selectInvert: 'Invertir selección', selectInvert: 'Invertir selección',
sortTitle: 'Ordenar',
}, },
Modal: { Modal: {
okText: 'Aceptar', okText: 'Aceptar',
@ -39,4 +43,16 @@ export default {
Empty: { Empty: {
description: 'No hay datos', description: 'No hay datos',
}, },
Icon: {
icon: 'ícono',
},
Text: {
edit: 'editar',
copy: 'copiar',
copied: 'copiado',
expand: 'expandir',
},
PageHeader: {
back: 'volver',
},
}; };

View File

@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import RcMenu, { Divider, ItemGroup } from 'rc-menu'; import RcMenu, { Divider, ItemGroup } from 'rc-menu';
import createContext, { Context } from '@ant-design/create-react-context'; import createContext from '@ant-design/create-react-context';
import classNames from 'classnames'; import classNames from 'classnames';
import omit from 'omit.js'; import omit from 'omit.js';
import SubMenu from './SubMenu'; import SubMenu from './SubMenu';
@ -79,7 +79,7 @@ export interface MenuContextProps {
antdMenuTheme?: MenuTheme; antdMenuTheme?: MenuTheme;
} }
export const MenuContext: Context<MenuContextProps> = createContext({ export const MenuContext = createContext<MenuContextProps>({
inlineCollapsed: false, inlineCollapsed: false,
}); });

View File

@ -43,6 +43,10 @@
padding 0.15s @ease-in-out; padding 0.15s @ease-in-out;
} }
&-submenu-selected {
color: @menu-highlight-color;
}
&-item:active, &-item:active,
&-submenu-title:active { &-submenu-title:active {
background: @menu-item-active-bg; background: @menu-item-active-bg;

View File

@ -17,15 +17,15 @@ Messages of success, error and warning types.
import { message, Button } from 'antd'; import { message, Button } from 'antd';
const success = () => { const success = () => {
message.success('This is a message of success'); message.success('This is a success message');
}; };
const error = () => { const error = () => {
message.error('This is a message of error'); message.error('This is an error message');
}; };
const warning = () => { const warning = () => {
message.warning('This is message of warning'); message.warning('This is a warning message');
}; };
ReactDOM.render( ReactDOM.render(

View File

@ -28,6 +28,7 @@ exports[`Modal render correctly 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"
@ -120,6 +121,7 @@ exports[`Modal render without footer 1`] = `
<button <button
aria-label="Close" aria-label="Close"
class="ant-modal-close" class="ant-modal-close"
type="button"
> >
<span <span
class="ant-modal-close-x" class="ant-modal-close-x"

View File

@ -70,7 +70,7 @@ const renderTitle = (prefixCls: string, props: PageHeaderProps) => {
const titlePrefixCls = `${prefixCls}-title-view`; const titlePrefixCls = `${prefixCls}-title-view`;
if (title || subTitle || tags || extra) { if (title || subTitle || tags || extra) {
return ( return (
<div className={`${prefixCls}-title-view`}> <div className={titlePrefixCls}>
{title && <span className={`${titlePrefixCls}-title`}>{title}</span>} {title && <span className={`${titlePrefixCls}-title`}>{title}</span>}
{subTitle && <span className={`${titlePrefixCls}-sub-title`}>{subTitle}</span>} {subTitle && <span className={`${titlePrefixCls}-sub-title`}>{subTitle}</span>}
{tags && <span className={`${titlePrefixCls}-tags`}>{tags}</span>} {tags && <span className={`${titlePrefixCls}-tags`}>{tags}</span>}

View File

@ -65,10 +65,10 @@
top: 16px; top: 16px;
right: @page-header-padding-horizontal; right: @page-header-padding-horizontal;
> * { > * {
margin-right: 8px; margin-left: 8px;
} }
> *:last-child { > *:first-child {
margin-right: 0; margin-left: 0;
} }
} }
} }

View File

@ -31,6 +31,7 @@ A long list can be divided into several pages by `Pagination`, and only one page
| showLessItems | show less page items | boolean | false | | | showLessItems | show less page items | boolean | false | |
| showQuickJumper | determine whether you can jump to pages directly | boolean \| `{ goButton: ReactNode }` | false | | | showQuickJumper | determine whether you can jump to pages directly | boolean \| `{ goButton: ReactNode }` | false | |
| showSizeChanger | determine whether `pageSize` can be changed | boolean | false | | | showSizeChanger | determine whether `pageSize` can be changed | boolean | false | |
| showTitle | show page items title | boolean | true | |
| showTotal | to display the total number and range | Function(total, range) | - | | | showTotal | to display the total number and range | Function(total, range) | - | |
| simple | whether to use simple mode | boolean | - | | | simple | whether to use simple mode | boolean | - | |
| size | specify the size of `Pagination`, can be set to `small` | string | "" | | | size | specify the size of `Pagination`, can be set to `small` | string | "" | |

View File

@ -47,8 +47,6 @@
@code-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; @code-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
@text-color: fade(@black, 65%); @text-color: fade(@black, 65%);
@text-color-secondary: fade(@black, 45%); @text-color-secondary: fade(@black, 45%);
@text-color-warning: @gold-7;
@text-color-danger: @red-7;
@text-color-inverse: @white; @text-color-inverse: @white;
@icon-color: inherit; @icon-color: inherit;
@icon-color-hover: fade(@black, 75%); @icon-color-hover: fade(@black, 75%);
@ -155,7 +153,7 @@
@btn-primary-bg: @primary-color; @btn-primary-bg: @primary-color;
@btn-default-color: @text-color; @btn-default-color: @text-color;
@btn-default-bg: #fff; @btn-default-bg: @component-background;
@btn-default-border: @border-color-base; @btn-default-border: @border-color-base;
@btn-danger-color: @error-color; @btn-danger-color: @error-color;
@ -188,6 +186,10 @@
@checkbox-check-color: #fff; @checkbox-check-color: #fff;
@checkbox-border-width: @border-width-base; @checkbox-border-width: @border-width-base;
// Dropdown
@dropdown-selected-color: @primary-color;
// Empty // Empty
@empty-font-size: @font-size-base; @empty-font-size: @font-size-base;
@ -311,7 +313,7 @@
@input-placeholder-color: hsv(0, 0, 75%); @input-placeholder-color: hsv(0, 0, 75%);
@input-color: @text-color; @input-color: @text-color;
@input-border-color: @border-color-base; @input-border-color: @border-color-base;
@input-bg: #fff; @input-bg: @component-background;
@input-number-handler-active-bg: #f4f4f4; @input-number-handler-active-bg: #f4f4f4;
@input-addon-bg: @background-color-light; @input-addon-bg: @background-color-light;
@input-hover-border-color: @primary-color; @input-hover-border-color: @primary-color;
@ -341,7 +343,7 @@
// Popover // Popover
// --- // ---
// Popover body background color // Popover body background color
@popover-bg: #fff; @popover-bg: @component-background;
// Popover text color // Popover text color
@popover-color: @text-color; @popover-color: @text-color;
// Popover maximum width // Popover maximum width
@ -381,6 +383,7 @@
@menu-item-active-bg: @item-active-bg; @menu-item-active-bg: @item-active-bg;
@menu-item-active-border-width: 3px; @menu-item-active-border-width: 3px;
@menu-item-group-title-color: @text-color-secondary; @menu-item-group-title-color: @text-color-secondary;
// dark theme // dark theme
@menu-dark-color: @text-color-secondary-dark; @menu-dark-color: @text-color-secondary-dark;
@menu-dark-bg: @layout-header-background; @menu-dark-bg: @layout-header-background;
@ -459,6 +462,8 @@
// --- // ---
@comment-padding-base: 16px 0; @comment-padding-base: 16px 0;
@comment-nest-indent: 44px; @comment-nest-indent: 44px;
@comment-font-size-base: @font-size-base;
@comment-font-size-sm: @font-size-sm;
@comment-author-name-color: @text-color-secondary; @comment-author-name-color: @text-color-secondary;
@comment-author-time-color: #ccc; @comment-author-time-color: #ccc;
@comment-action-color: @text-color-secondary; @comment-action-color: @text-color-secondary;

View File

@ -156,7 +156,8 @@ export default class Table<T> extends React.Component<TableProps<T>, TableState<
const key = this.getRecordKey(item, index); const key = this.getRecordKey(item, index);
// Cache checkboxProps // Cache checkboxProps
if (!this.CheckboxPropsCache[key]) { if (!this.CheckboxPropsCache[key]) {
const checkboxProps = (this.CheckboxPropsCache[key] = rowSelection.getCheckboxProps(item)); this.CheckboxPropsCache[key] = rowSelection.getCheckboxProps(item) || {};
const checkboxProps = this.CheckboxPropsCache[key];
warning( warning(
!('checked' in checkboxProps) && !('defaultChecked' in checkboxProps), !('checked' in checkboxProps) && !('defaultChecked' in checkboxProps),
'Table', 'Table',
@ -413,6 +414,9 @@ export default class Table<T> extends React.Component<TableProps<T>, TableState<
if (!column.sorter) { if (!column.sorter) {
return; return;
} }
const pagination = { ...this.state.pagination };
const sortDirections = column.sortDirections || (this.props.sortDirections as SortOrder[]); const sortDirections = column.sortDirections || (this.props.sortDirections as SortOrder[]);
const { sortOrder, sortColumn } = this.state; const { sortOrder, sortColumn } = this.state;
// 只同时允许一列进行排序,否则会导致排序顺序的逻辑问题 // 只同时允许一列进行排序,否则会导致排序顺序的逻辑问题
@ -427,7 +431,14 @@ export default class Table<T> extends React.Component<TableProps<T>, TableState<
newSortOrder = sortDirections[0]; newSortOrder = sortDirections[0];
} }
if (this.props.pagination) {
// Reset current prop
pagination.current = 1;
pagination.onChange!(pagination.current);
}
const newState = { const newState = {
pagination,
sortOrder: newSortOrder, sortOrder: newSortOrder,
sortColumn: newSortOrder ? column : null, sortColumn: newSortOrder ? column : null,
}; };

View File

@ -587,4 +587,23 @@ describe('Table.sorter', () => {
wrapper.find('.ant-table-column-sorters').simulate('click'); wrapper.find('.ant-table-column-sorters').simulate('click');
expect(renderedNames(wrapper)).toEqual(['Jack', 'Lucy', 'Tom', 'Jerry']); expect(renderedNames(wrapper)).toEqual(['Jack', 'Lucy', 'Tom', 'Jerry']);
}); });
it('pagination back', () => {
const onPageChange = jest.fn();
const onChange = jest.fn();
const wrapper = mount(
createTable({
pagination: {
pageSize: 2,
onChange: onPageChange,
},
onChange,
}),
);
wrapper.find('.ant-table-column-sorters').simulate('click');
expect(onChange.mock.calls[0][0].current).toBe(1);
expect(onPageChange.mock.calls[0][0]).toBe(1);
});
}); });

View File

@ -8877,7 +8877,9 @@ exports[`renders ./components/table/demo/grouping-columns.md correctly 1`] = `
<col <col
style="width:100px;min-width:100px" style="width:100px;min-width:100px"
/> />
<col /> <col
style="width:200px;min-width:200px"
/>
<col /> <col />
<col <col
style="width:80px;min-width:80px" style="width:80px;min-width:80px"
@ -9214,7 +9216,9 @@ exports[`renders ./components/table/demo/grouping-columns.md correctly 1`] = `
<col <col
style="width:100px;min-width:100px" style="width:100px;min-width:100px"
/> />
<col /> <col
style="width:200px;min-width:200px"
/>
<col /> <col />
<col <col
style="width:80px;min-width:80px" style="width:80px;min-width:80px"

View File

@ -82,6 +82,7 @@ const columns = [
title: 'Company Address', title: 'Company Address',
dataIndex: 'companyAddress', dataIndex: 'companyAddress',
key: 'companyAddress', key: 'companyAddress',
width: 200,
}, },
{ {
title: 'Company Name', title: 'Company Name',

View File

@ -32,175 +32,170 @@
border-collapse: collapse; border-collapse: collapse;
} }
&-thead > tr { &-thead > tr > th {
// For Chrome extra space: color: @table-header-color;
// - https://github.com/ant-design/ant-design/issues/14926 font-weight: 500;
// - https://github.com/ant-design/ant-design/issues/16131 text-align: left;
background: @table-header-bg; background: @table-header-bg;
border-bottom: @border-width-base @border-style-base @border-color-split;
transition: background 0.3s ease;
> th { &[colspan] {
color: @table-header-color; text-align: center;
font-weight: 500; }
text-align: left;
background: transparent;
border-bottom: @border-width-base @border-style-base @border-color-split;
transition: background 0.3s ease;
&[colspan] { .@{iconfont-css-prefix}-filter,
text-align: center; .@{table-prefix-cls}-filter-icon {
} position: absolute;
top: 0;
right: 0;
width: 28px;
height: 100%;
color: @table-header-icon-color;
font-size: @font-size-sm;
text-align: center;
cursor: pointer;
transition: all 0.3s;
.@{iconfont-css-prefix}-filter, > svg {
.@{table-prefix-cls}-filter-icon {
position: absolute; position: absolute;
top: 0; top: 50%;
right: 0; left: 50%;
width: 28px; margin-top: -@font-size-sm / 2 + 1px;
height: 100%; margin-left: -@font-size-sm / 2;
}
}
.@{table-prefix-cls}-filter-selected.@{iconfont-css-prefix}-filter {
color: @primary-color;
}
.@{table-prefix-cls}-column-sorter {
display: table-cell;
vertical-align: middle;
.@{table-prefix-cls}-column-sorter-inner {
height: 1em;
margin-top: 0.35em;
margin-left: 0.57142857em;
color: @table-header-icon-color; color: @table-header-icon-color;
font-size: @font-size-sm; line-height: 1em;
text-align: center; text-align: center;
cursor: pointer;
transition: all 0.3s; transition: all 0.3s;
> svg { .@{table-prefix-cls}-column-sorter-up,
position: absolute; .@{table-prefix-cls}-column-sorter-down {
top: 50%; .iconfont-size-under-12px(11px);
left: 50%;
margin-top: -@font-size-sm / 2 + 1px;
margin-left: -@font-size-sm / 2;
}
}
.@{table-prefix-cls}-filter-selected.@{iconfont-css-prefix}-filter { display: block;
color: @primary-color;
}
.@{table-prefix-cls}-column-sorter {
display: table-cell;
vertical-align: middle;
.@{table-prefix-cls}-column-sorter-inner {
height: 1em; height: 1em;
margin-top: 0.35em;
margin-left: 0.57142857em;
color: @table-header-icon-color;
line-height: 1em; line-height: 1em;
text-align: center;
transition: all 0.3s; transition: all 0.3s;
&.on {
color: @primary-color;
}
}
&-full {
margin-top: -0.15em;
.@{table-prefix-cls}-column-sorter-up, .@{table-prefix-cls}-column-sorter-up,
.@{table-prefix-cls}-column-sorter-down { .@{table-prefix-cls}-column-sorter-down {
.iconfont-size-under-12px(11px); height: 0.5em;
line-height: 0.5em;
display: block;
height: 1em;
line-height: 1em;
transition: all 0.3s;
&.on {
color: @primary-color;
}
} }
&-full { .@{table-prefix-cls}-column-sorter-down {
margin-top: -0.15em; margin-top: 0.125em;
.@{table-prefix-cls}-column-sorter-up,
.@{table-prefix-cls}-column-sorter-down {
height: 0.5em;
line-height: 0.5em;
}
.@{table-prefix-cls}-column-sorter-down {
margin-top: 0.125em;
}
} }
} }
} }
}
&.@{table-prefix-cls}-column-has-actions { &.@{table-prefix-cls}-column-has-actions {
position: relative; position: relative;
background-clip: padding-box; // For Firefox background bug, https://github.com/ant-design/ant-design/issues/12628 background-clip: padding-box; // For Firefox background bug, https://github.com/ant-design/ant-design/issues/12628
/* stylelint-disable-next-line */
-webkit-background-clip: border-box; // For Chrome extra space: https://github.com/ant-design/ant-design/issues/14926
&.@{table-prefix-cls}-column-has-filters { &.@{table-prefix-cls}-column-has-filters {
// https://github.com/ant-design/ant-design/issues/12650 // https://github.com/ant-design/ant-design/issues/12650
padding-right: 30px !important; padding-right: 30px !important;
.@{iconfont-css-prefix}-filter,
.@{table-prefix-cls}-filter-icon {
&.@{table-prefix-cls}-filter-open {
color: @text-color-secondary;
background: @table-header-filter-active-bg;
}
}
// Very complicated styles logic but necessary
&:hover {
.@{iconfont-css-prefix}-filter, .@{iconfont-css-prefix}-filter,
.@{table-prefix-cls}-filter-icon { .@{table-prefix-cls}-filter-icon {
&.@{table-prefix-cls}-filter-open { &:hover {
color: @text-color-secondary; color: @text-color-secondary;
background: @table-header-filter-active-bg; background: @table-header-filter-active-bg;
} }
} &:active {
// Very complicated styles logic but necessary color: @text-color;
&:hover {
.@{iconfont-css-prefix}-filter,
.@{table-prefix-cls}-filter-icon {
&:hover {
color: @text-color-secondary;
background: @table-header-filter-active-bg;
}
&:active {
color: @text-color;
}
} }
} }
} }
&.@{table-prefix-cls}-column-has-sorters {
cursor: pointer;
&:hover {
background: @table-header-sort-active-bg;
.@{iconfont-css-prefix}-filter,
.@{table-prefix-cls}-filter-icon {
background: @table-header-sort-active-bg;
}
}
&:active {
.@{table-prefix-cls}-column-sorter-up:not(.on),
.@{table-prefix-cls}-column-sorter-down:not(.on) {
color: @text-color-secondary;
}
}
}
}
.@{table-prefix-cls}-header-column {
display: inline-block;
vertical-align: top;
.@{table-prefix-cls}-column-sorters {
display: table;
> .@{table-prefix-cls}-column-title {
display: table-cell;
vertical-align: middle;
}
> *:not(.@{table-prefix-cls}-column-sorter) {
position: relative;
}
&::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: transparent;
transition: all 0.3s;
content: '';
}
&:hover::before {
background: rgba(0, 0, 0, 0.04);
}
}
} }
&.@{table-prefix-cls}-column-has-sorters { &.@{table-prefix-cls}-column-has-sorters {
user-select: none; cursor: pointer;
&:hover {
background: @table-header-sort-active-bg;
.@{iconfont-css-prefix}-filter,
.@{table-prefix-cls}-filter-icon {
background: @table-header-sort-active-bg;
}
}
&:active {
.@{table-prefix-cls}-column-sorter-up:not(.on),
.@{table-prefix-cls}-column-sorter-down:not(.on) {
color: @text-color-secondary;
}
}
} }
} }
.@{table-prefix-cls}-header-column {
display: inline-block;
vertical-align: top;
.@{table-prefix-cls}-column-sorters {
display: table;
> .@{table-prefix-cls}-column-title {
display: table-cell;
vertical-align: middle;
}
> *:not(.@{table-prefix-cls}-column-sorter) {
position: relative;
}
&::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: transparent;
transition: all 0.3s;
content: '';
}
&:hover::before {
background: rgba(0, 0, 0, 0.04);
}
}
}
&.@{table-prefix-cls}-column-has-sorters {
user-select: none;
}
} }
&-thead > tr:first-child > th { &-thead > tr:first-child > th {
@ -248,6 +243,10 @@
} }
} }
&-thead > tr:hover {
background: none;
}
&-footer { &-footer {
position: relative; position: relative;
padding: @table-padding-vertical @table-padding-horizontal; padding: @table-padding-vertical @table-padding-horizontal;
@ -284,8 +283,8 @@
&-title + &-content { &-title + &-content {
position: relative; position: relative;
overflow: hidden;
border-radius: @table-border-radius-base @table-border-radius-base 0 0; border-radius: @table-border-radius-base @table-border-radius-base 0 0;
.@{table-prefix-cls}-bordered & { .@{table-prefix-cls}-bordered & {
&, &,
table, table,
@ -611,6 +610,32 @@
// Workaround for additional scroll bar on the table header // Workaround for additional scroll bar on the table header
// https://github.com/ant-design/ant-design/issues/6515#issuecomment-419634369 // https://github.com/ant-design/ant-design/issues/6515#issuecomment-419634369
opacity: 0.9999; opacity: 0.9999;
&::-webkit-scrollbar {
border: 1px solid @border-color-split;
border-width: 0 0 1px 0;
}
}
&-hide-scrollbar {
// https://github.com/ant-design/ant-design/issues/4637
// https://stackoverflow.com/a/54101063
// https://github.com/react-component/table/pull/333
scrollbar-color: transparent transparent;
&::-webkit-scrollbar {
background-color: transparent;
}
}
// optimize header style of borderd table after hide extra scrollbar
&-bordered&-fixed-header &-scroll &-header {
&::-webkit-scrollbar {
border: 1px solid @border-color-split;
border-width: 1px 1px 1px 0;
}
&.@{table-prefix-cls}-hide-scrollbar .@{table-prefix-cls}-thead > tr > th:last-child {
border-right-color: transparent;
}
} }
&-fixed-left, &-fixed-left,
@ -708,4 +733,15 @@
} }
} }
/**
* Another fix of Firefox:
* - https://github.com/ant-design/ant-design/issues/12628
* - https://github.com/ant-design/ant-design/issues/12628
*/
@supports (-moz-appearance: meterbar) {
.@{table-prefix-cls}-thead > tr > th.@{table-prefix-cls}-column-has-actions {
background-clip: padding-box;
}
}
@import './size'; @import './size';

View File

@ -225,3 +225,14 @@
right: @control-padding-horizontal-sm - 1px; right: @control-padding-horizontal-sm - 1px;
} }
} }
// Fix cursor height in safari
// https://stackoverflow.com/q/3843408/3040605
// https://browserstrangeness.github.io/css_hacks.html#safari
@media not all and (min-resolution: 0.001dpcm) {
@supports (-webkit-appearance: none) and (stroke-color: transparent) {
.@{ant-prefix}-input {
line-height: @line-height-base;
}
}
}

View File

@ -159,26 +159,25 @@ export default class TransferList extends React.Component<TransferListProps, Tra
</div> </div>
) : null; ) : null;
const searchNotFound = !filteredItems.length && (
<div className={`${prefixCls}-body-not-found`}>{notFoundContent}</div>
);
let listBody: React.ReactNode = bodyDom; let listBody: React.ReactNode = bodyDom;
if (!listBody) { if (!listBody) {
let bodyNode: React.ReactNode = searchNotFound; let bodyNode: React.ReactNode;
if (!bodyNode) {
const { bodyContent, customize } = renderListNode(renderList, {
...omit(this.props, OmitProps),
filteredItems,
filteredRenderItems,
selectedKeys: checkedKeys,
});
// We should wrap customize list body in a classNamed div to use flex layout. const { bodyContent, customize } = renderListNode(renderList, {
bodyNode = customize ? ( ...omit(this.props, OmitProps),
<div className={`${prefixCls}-body-customize-wrapper`}>{bodyContent}</div> filteredItems,
) : ( filteredRenderItems,
selectedKeys: checkedKeys,
});
// We should wrap customize list body in a classNamed div to use flex layout.
if (customize) {
bodyNode = <div className={`${prefixCls}-body-customize-wrapper`}>{bodyContent}</div>;
} else {
bodyNode = filteredItems.length ? (
bodyContent bodyContent
) : (
<div className={`${prefixCls}-body-not-found`}>{notFoundContent}</div>
); );
} }

View File

@ -244,7 +244,8 @@
left: 12px; left: 12px;
width: 1px; width: 1px;
height: 100%; height: 100%;
margin: 22px 0; height: calc(100% - 22px); // Remove additional height if support
margin: 22px 0 0;
border-left: 1px solid @border-color-base; border-left: 1px solid @border-color-base;
content: ' '; content: ' ';
} }

View File

@ -2,7 +2,7 @@ import * as React from 'react';
import warning from '../_util/warning'; import warning from '../_util/warning';
import Base, { BlockProps } from './Base'; import Base, { BlockProps } from './Base';
interface TextProps extends BlockProps { export interface TextProps extends BlockProps {
ellipsis?: boolean; ellipsis?: boolean;
} }
@ -10,7 +10,7 @@ const Text: React.SFC<TextProps> = ({ ellipsis, ...restProps }) => {
warning( warning(
typeof ellipsis !== 'object', typeof ellipsis !== 'object',
'Typography.Text', 'Typography.Text',
'`ellipsis` is only support boolean value.', '`ellipsis` only supports boolean value.',
); );
return <Base {...restProps} ellipsis={!!ellipsis} component="span" />; return <Base {...restProps} ellipsis={!!ellipsis} component="span" />;
}; };

View File

@ -39,11 +39,11 @@
} }
&&-warning { &&-warning {
color: @text-color-warning; color: @warning-color;
} }
&&-danger { &&-danger {
color: @text-color-danger; color: @error-color;
} }
&&-disabled { &&-disabled {

View File

@ -8,7 +8,8 @@ export interface HttpRequestHeader {
export interface RcFile extends File { export interface RcFile extends File {
uid: string; uid: string;
lastModifiedDate: Date; readonly lastModifiedDate: Date;
readonly webkitRelativePath: string;
} }
export interface UploadFile { export interface UploadFile {
@ -27,7 +28,6 @@ export interface UploadFile {
error?: any; error?: any;
linkProps?: any; linkProps?: any;
type: string; type: string;
webkitRelativePath?: string;
} }
export interface UploadChangeParam<T extends object = UploadFile> { export interface UploadChangeParam<T extends object = UploadFile> {
@ -59,7 +59,7 @@ export interface UploadProps {
name?: string; name?: string;
defaultFileList?: Array<UploadFile>; defaultFileList?: Array<UploadFile>;
fileList?: Array<UploadFile>; fileList?: Array<UploadFile>;
action?: string | ((file: UploadFile) => string) | ((file: UploadFile) => PromiseLike<string>); action?: string | ((file: RcFile) => string) | ((file: RcFile) => PromiseLike<string>);
directory?: boolean; directory?: boolean;
data?: Object | ((file: UploadFile) => any); data?: Object | ((file: UploadFile) => any);
headers?: HttpRequestHeader; headers?: HttpRequestHeader;

View File

@ -106,6 +106,19 @@ If you need some features which should not be included in antd, try to extend an
You can config `nonce` by [ConfigProvider](/components/config-provider/#Content-Security-Policy). You can config `nonce` by [ConfigProvider](/components/config-provider/#Content-Security-Policy).
### When set `mode` to DatePicker/RangePicker, cannot select year or month anymore?
In real world development, you may need a YearPicker, MonthRangePicker or WeekRangePicker. You are trying to add `mode` to DatePicker/RangePicker expected to implement those pickers. However, the DatePicker/RangePicker cannot be selected and the panels won't close now!
- Reproduce link: https://codesandbox.io/s/dank-brook-v1csy
- Same issues[#15572](https://github.com/ant-design/ant-design/issues/15572), [#16436](https://github.com/ant-design/ant-design/issues/16436), [#11938](https://github.com/ant-design/ant-design/issues/11938), [#11735](https://github.com/ant-design/ant-design/issues/11735), [#11586](https://github.com/ant-design/ant-design/issues/11586), [#10425](https://github.com/ant-design/ant-design/issues/10425), [#11053](https://github.com/ant-design/ant-design/issues/11053)
Like [the explaination](https://github.com/ant-design/ant-design/issues/11586#issuecomment-429189877) here, that is because `<DatePicker mode="year" />` do not equal to `YearPicker`, `<RangePicker mode="month" />` do not equal to `MonthRangePicker` either. The `mode` property was added to support [showing time picker panel in DatePicker](https://github.com/ant-design/ant-design/issues/5190) in antd 3.0, which simply control the displayed panel and won't change the original date picking behavior of `DatePicker/RangePicker` (for instance you still need to click date cell to finish selection in a DatePicker, whatever the `mode` is).
##### Workaround
You can refer to [this article](https://juejin.im/post/5cf65c366fb9a07eca6968f9) or [this article](https://www.cnblogs.com/zyl-Tara/p/10197177.html), using `mode` and `onPanelChange` to encapsulate a `YearPicker` or `MonthRangePicker` for your needs. Or you can wait for our [antd@4.0](https://github.com/ant-design/ant-design/issues/16911), in which we are planing to [add more XxxPickers](https://github.com/ant-design/ant-design/issues/4524#issuecomment-480576884) for those requirments.
### How to spell Ant Design correctly? ### How to spell Ant Design correctly?
- ✅ **Ant Design**: Capitalized with space, for the design language. - ✅ **Ant Design**: Capitalized with space, for the design language.

View File

@ -110,6 +110,19 @@ import { Menu, Breadcrumb, Icon } from 'antd';
你可以通过 [ConfigProvider](/components/config-provider/#Content-Security-Policy) 来配置 `nonce` 属性。 你可以通过 [ConfigProvider](/components/config-provider/#Content-Security-Policy) 来配置 `nonce` 属性。
### 当我指定了 DatePicker/RangePicker 的 `mode` 属性后,点击后无法选择年份/月份?
在业务开发中,你可能有年份选择,月份范围选择,周范围选择等需求,此时你给现有组件增加了 `mode` 属性,却发现无法进行点击选择行为,面板也不会关闭。
- 重现链接https://codesandbox.io/s/dank-brook-v1csy
- 相同 issue[#15572](https://github.com/ant-design/ant-design/issues/15572)、[#16436](https://github.com/ant-design/ant-design/issues/16436)、[#11938](https://github.com/ant-design/ant-design/issues/11938)、[#11735](https://github.com/ant-design/ant-design/issues/11735)、[#11586](https://github.com/ant-design/ant-design/issues/11586)、[#10425](https://github.com/ant-design/ant-design/issues/10425)、[#11053](https://github.com/ant-design/ant-design/issues/11053)
就像[这个回复](https://github.com/ant-design/ant-design/issues/15572#issuecomment-475476135)里解释的一样,这是因为 `<DatePicker mode="year" />` 不等于 `YearPicker``<RangePicker mode="month" />` 不等于 `MonthRangePicker``mode` 属性是在 antd 3.0 时,为了控制面板展现状态而添加的属性,以支持[展示时间面板](https://github.com/ant-design/ant-design/issues/5190)等需求而添加的。`mode` 只会简单的改变当前显示的面板,不会修改默认的交互行为(比如 DatePicker 依然是点击日才会完成选择并关闭面板)。
##### 解决办法
你可以参照 [这篇文章](https://juejin.im/post/5cf65c366fb9a07eca6968f9) 或者 [这篇文章](https://www.cnblogs.com/zyl-Tara/p/10197177.html) 里的做法,利用 `mode``onPanelChange` 等方法去封装一个 `YearPicker` 等组件。我们计划在 [antd@4.0](https://github.com/ant-design/ant-design/issues/16911) 中直接[添加更多相关日期组件](https://github.com/ant-design/ant-design/issues/4524#issuecomment-480576884)来支持这些需求。
### 如何正确的拼写 Ant Design ### 如何正确的拼写 Ant Design
- ✅ **Ant Design**:用空格分隔的首字母大写单词,指代设计语言。 - ✅ **Ant Design**:用空格分隔的首字母大写单词,指代设计语言。

View File

@ -38,7 +38,7 @@ Ant Design 的色板还具备进一步拓展的能力。经过设计师和程序
### 中性色板 ### 中性色板
中性色包含了黑、白、灰。在蚂蚁中后台的网页设计中被大量使用到,合理选择中性色能够令页面信息具备良好的主次关系助力阅读体验。Ant Design 的中性色板一共包含了从白到黑的 10 个颜色。 中性色包含了黑、白、灰。在蚂蚁中后台的网页设计中被大量使用到,合理选择中性色能够令页面信息具备良好的主次关系助力阅读体验。Ant Design 的中性色板一共包含了从白到黑的 10 个颜色。
```__react ```__react
import Palette from '../../site/theme/template/Color/Palette'; import Palette from '../../site/theme/template/Color/Palette';
@ -99,7 +99,7 @@ ReactDOM.render(<ColorPaletteTool />, mountNode);
<img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/rmsportal/msiCkgfDaDgrTUuumxlq.png"> <img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/rmsportal/msiCkgfDaDgrTUuumxlq.png">
品牌色是体现产品特性和传播理念最直观的视觉元素之一。在色彩选取时,需要先明确品牌色在界面中的使用场景及范围。在基础色板中选择主色,我们建议选择色板从浅深的第六个颜色作为主色。 Ant Design 的品牌色取自基础色板的蓝色Hex 值为 1890FF应用场景包括关键行动点操作状态、重要信息高亮图形化等场景。 品牌色是体现产品特性和传播理念最直观的视觉元素之一。在色彩选取时,需要先明确品牌色在界面中的使用场景及范围。在基础色板中选择主色,我们建议选择色板从浅深的第六个颜色作为主色。 Ant Design 的品牌色取自基础色板的蓝色Hex 值为 `#1890FF`,应用场景包括:关键行动点,操作状态、重要信息高亮,图形化等场景。
### 功能色 ### 功能色

View File

@ -71,7 +71,7 @@ When the operation takes a while (usually more than 2 seconds) to complete, the
<br /> <br />
<img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/rmsportal/cHaaqZTvzgCZiYUnfNom.png" description="Used when the operation takes a long time to complete, showing the current progress and status of the operation."> <img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/antfincdn/j6XiEx6UUV/676a18a1-bf60-4d93-8f94-55f1882dd13e.png" description="Used when the operation takes a long time to complete, showing the current progress and status of the operation.">
> Note: If the loading time is long, a cancel operation should be provided. > Note: If the loading time is long, a cancel operation should be provided.

View File

@ -71,7 +71,7 @@ title: 反馈
<br /> <br />
<img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/rmsportal/cHaaqZTvzgCZiYUnfNom.png" description="在操作需要较长时间才能完成时使用,显示该操作的当前进度和状态。"> <img class="preview-img no-padding" align="right" src="https://gw.alipayobjects.com/zos/antfincdn/j6XiEx6UUV/676a18a1-bf60-4d93-8f94-55f1882dd13e.png" description="在操作需要较长时间才能完成时使用,显示该操作的当前进度和状态。">
> 注:若加载时间较长,应提供取消操作。 > 注:若加载时间较长,应提供取消操作。

View File

@ -1,6 +1,6 @@
{ {
"name": "antd", "name": "antd",
"version": "3.19.1", "version": "3.19.3",
"title": "Ant Design", "title": "Ant Design",
"description": "An enterprise-class UI design language and React components implementation", "description": "An enterprise-class UI design language and React components implementation",
"homepage": "http://ant.design/", "homepage": "http://ant.design/",
@ -44,154 +44,155 @@
"dependencies": { "dependencies": {
"@ant-design/create-react-context": "^0.2.4", "@ant-design/create-react-context": "^0.2.4",
"@ant-design/icons": "~2.1.0", "@ant-design/icons": "~2.1.0",
"@ant-design/icons-react": "~2.0.0", "@ant-design/icons-react": "~2.0.1",
"@types/react-slick": "^0.23.3", "@types/react-slick": "^0.23.4",
"array-tree-filter": "^2.1.0", "array-tree-filter": "^2.1.0",
"babel-runtime": "6.x", "babel-runtime": "6.x",
"classnames": "~2.2.6", "classnames": "~2.2.6",
"copy-to-clipboard": "^3.0.8", "copy-to-clipboard": "^3.2.0",
"css-animation": "^1.5.0", "css-animation": "^1.5.0",
"dom-closest": "^0.2.0", "dom-closest": "^0.2.0",
"enquire.js": "^2.1.6", "enquire.js": "^2.1.6",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"moment": "^2.24.0", "moment": "^2.24.0",
"omit.js": "^1.0.0", "omit.js": "^1.0.2",
"prop-types": "^15.6.2", "prop-types": "^15.7.2",
"raf": "^3.4.0", "raf": "^3.4.1",
"rc-animate": "^2.5.4", "rc-animate": "^2.8.3",
"rc-calendar": "~9.14.0", "rc-calendar": "~9.15.0",
"rc-cascader": "~0.17.0", "rc-cascader": "~0.17.4",
"rc-checkbox": "~2.1.5", "rc-checkbox": "~2.1.6",
"rc-collapse": "~1.11.1", "rc-collapse": "~1.11.3",
"rc-dialog": "~7.4.0", "rc-dialog": "~7.4.0",
"rc-drawer": "~1.9.3", "rc-drawer": "~1.9.8",
"rc-dropdown": "~2.4.1", "rc-dropdown": "~2.4.1",
"rc-editor-mention": "^1.1.7", "rc-editor-mention": "^1.1.13",
"rc-form": "^2.4.0", "rc-form": "^2.4.5",
"rc-input-number": "~4.4.0", "rc-input-number": "~4.4.5",
"rc-mentions": "~0.3.1", "rc-mentions": "~0.3.1",
"rc-menu": "~7.4.12", "rc-menu": "~7.4.23",
"rc-notification": "~3.3.0", "rc-notification": "~3.3.1",
"rc-pagination": "~1.20.1", "rc-pagination": "~1.20.1",
"rc-progress": "~2.3.0", "rc-progress": "~2.3.0",
"rc-rate": "~2.5.0", "rc-rate": "~2.5.0",
"rc-select": "~9.1.0", "rc-select": "~9.1.4",
"rc-slider": "~8.6.5", "rc-slider": "~8.6.11",
"rc-steps": "~3.4.1", "rc-steps": "~3.4.1",
"rc-switch": "~1.9.0", "rc-switch": "~1.9.0",
"rc-table": "~6.5.0", "rc-table": "~6.6.0",
"rc-tabs": "~9.6.0", "rc-tabs": "~9.6.4",
"rc-time-picker": "~3.6.1", "rc-time-picker": "~3.6.6",
"rc-tooltip": "~3.7.3", "rc-tooltip": "~3.7.3",
"rc-tree": "~2.1.0", "rc-tree": "~2.1.0",
"rc-tree-select": "~2.9.1", "rc-tree-select": "~2.9.1",
"rc-trigger": "^2.6.2", "rc-trigger": "^2.6.2",
"rc-upload": "~2.6.0", "rc-upload": "~2.6.7",
"rc-util": "^4.5.1", "rc-util": "^4.6.0",
"react-lazy-load": "^3.0.13", "react-lazy-load": "^3.0.13",
"react-lifecycles-compat": "^3.0.4", "react-lifecycles-compat": "^3.0.4",
"react-slick": "~0.24.0", "react-slick": "~0.24.0",
"resize-observer-polyfill": "^1.5.0", "resize-observer-polyfill": "^1.5.1",
"shallowequal": "^1.1.0", "shallowequal": "^1.1.0",
"warning": "~4.0.2" "warning": "~4.0.3"
}, },
"devDependencies": { "devDependencies": {
"@ant-design/colors": "^3.0.0", "@ant-design/colors": "^3.1.0",
"@sentry/browser": "^5.0.3", "@packtracker/webpack-plugin": "^2.0.1",
"@types/classnames": "^2.2.6", "@sentry/browser": "^5.4.0",
"@types/prop-types": "^15.5.6", "@types/classnames": "^2.2.8",
"@types/react": "~16.8.1", "@types/prop-types": "^15.7.1",
"@types/react-dom": "^16.0.11", "@types/react": "~16.8.19",
"@types/react-intl": "^2.3.14", "@types/react-dom": "^16.8.4",
"@types/react-intl": "^2.3.17",
"@types/warning": "^3.0.0", "@types/warning": "^3.0.0",
"@yesmeck/offline-plugin": "^5.0.5", "@yesmeck/offline-plugin": "^5.0.5",
"ansi-styles": "^3.2.1", "ansi-styles": "^4.0.0",
"antd-theme-generator": "^1.1.4", "antd-theme-generator": "^1.1.6",
"antd-tools": "^7.3.5", "antd-tools": "^7.3.5",
"babel-eslint": "^10.0.1", "babel-eslint": "^10.0.1",
"babel-plugin-add-react-displayname": "^0.0.5", "babel-plugin-add-react-displayname": "^0.0.5",
"bisheng": "^1.2.4", "bisheng": "^1.2.4",
"bisheng-plugin-antd": "^1.0.1", "bisheng-plugin-antd": "^1.0.2",
"bisheng-plugin-description": "^0.1.4", "bisheng-plugin-description": "^0.1.4",
"bisheng-plugin-react": "^1.0.0", "bisheng-plugin-react": "^1.0.0",
"bisheng-plugin-toc": "^0.4.4", "bisheng-plugin-toc": "^0.4.4",
"chalk": "^2.4.2", "chalk": "^2.4.2",
"commander": "^2.18.0", "commander": "^2.20.0",
"cross-env": "^5.2.0", "cross-env": "^5.2.0",
"css-split-webpack-plugin": "^0.2.6", "css-split-webpack-plugin": "^0.2.6",
"dekko": "^0.2.1", "dekko": "^0.2.1",
"docsearch.js": "^2.5.2", "docsearch.js": "^2.6.3",
"enquire-js": "^0.2.1", "enquire-js": "^0.2.1",
"enzyme": "^3.7.0", "enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.6.0", "enzyme-adapter-react-16": "^1.14.0",
"enzyme-to-json": "^3.3.4", "enzyme-to-json": "^3.3.5",
"eslint": "^5.6.1", "eslint": "^5.16.0",
"eslint-config-airbnb": "^17.1.0", "eslint-config-airbnb": "^17.1.0",
"eslint-config-prettier": "^4.0.0", "eslint-config-prettier": "^4.3.0",
"eslint-plugin-babel": "^5.2.1", "eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "^2.17.1", "eslint-plugin-import": "^2.17.3",
"eslint-plugin-jest": "^22.4.1", "eslint-plugin-jest": "^22.6.4",
"eslint-plugin-jsx-a11y": "^6.1.2", "eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-markdown": "~1.0.0-beta.6", "eslint-plugin-markdown": "~1.0.0",
"eslint-plugin-react": "^7.11.1", "eslint-plugin-react": "^7.13.0",
"eslint-tinker": "^0.5.0", "eslint-tinker": "^0.5.0",
"fetch-jsonp": "^1.1.3", "fetch-jsonp": "^1.1.3",
"glob": "^7.1.3", "glob": "^7.1.4",
"immutability-helper": "^3.0.0", "immutability-helper": "^3.0.0",
"intersection-observer": "^0.7.0", "intersection-observer": "^0.7.0",
"jest": "^24.0.0", "jest": "^24.8.0",
"jsdom": "^15.0.0", "jsdom": "^15.1.1",
"jsonml.js": "^0.1.0", "jsonml.js": "^0.1.0",
"lint-staged": "^8.0.2", "lint-staged": "^8.1.7",
"logrocket": "^1.0.0", "logrocket": "^1.0.0",
"logrocket-react": "^3.0.0", "logrocket-react": "^3.0.0",
"lz-string": "^1.4.4", "lz-string": "^1.4.4",
"majo": "^0.7.1", "majo": "^0.8.0",
"mockdate": "^2.0.2", "mockdate": "^2.0.2",
"node-fetch": "^2.3.0", "node-fetch": "^2.6.0",
"pre-commit": "^1.2.2", "pre-commit": "^1.2.2",
"preact": "^8.3.1", "preact": "^8.4.2",
"preact-compat": "^3.18.4", "preact-compat": "^3.18.5",
"prettier": "^1.17.0", "prettier": "^1.17.1",
"querystring": "^0.2.0", "querystring": "^0.2.0",
"rc-queue-anim": "^1.6.6", "rc-queue-anim": "^1.6.12",
"rc-scroll-anim": "^2.5.7", "rc-scroll-anim": "^2.5.8",
"rc-tween-one": "^2.4.0", "rc-tween-one": "^2.4.1",
"react": "^16.5.2", "react": "^16.5.2",
"react-color": "^2.14.1", "react-color": "^2.17.3",
"react-copy-to-clipboard": "^5.0.1", "react-copy-to-clipboard": "^5.0.1",
"react-dnd": "^7.0.2", "react-dnd": "^7.4.5",
"react-dnd-html5-backend": "^7.0.2", "react-dnd-html5-backend": "^7.4.4",
"react-document-title": "^2.0.3", "react-document-title": "^2.0.3",
"react-dom": "^16.5.2", "react-dom": "^16.5.2",
"react-github-button": "^0.1.11", "react-github-button": "^0.1.11",
"react-highlight-words": "^0.16.0", "react-highlight-words": "^0.16.0",
"react-infinite-scroller": "^1.2.1", "react-infinite-scroller": "^1.2.4",
"react-intl": "^2.7.0", "react-intl": "^2.9.0",
"react-resizable": "^1.8.0", "react-resizable": "^1.8.0",
"react-router-dom": "^5.0.0", "react-router-dom": "^5.0.1",
"react-sticky": "^6.0.3", "react-sticky": "^6.0.3",
"react-test-renderer": "^16.6.3", "react-test-renderer": "^16.8.6",
"react-virtualized": "~9.21.0", "react-virtualized": "~9.21.1",
"remark-cli": "^6.0.1", "remark-cli": "^6.0.1",
"remark-frontmatter": "^1.3.0", "remark-frontmatter": "^1.3.1",
"remark-lint": "^6.0.4", "remark-lint": "^6.0.4",
"remark-parse": "^6.0.0", "remark-parse": "^6.0.3",
"remark-preset-lint-recommended": "^3.0.2", "remark-preset-lint-recommended": "^3.0.2",
"remark-stringify": "^6.0.0", "remark-stringify": "^6.0.4",
"remark-yaml-config": "^4.0.2", "remark-yaml-config": "^4.0.3",
"reqwest": "^2.0.5", "reqwest": "^2.0.5",
"rimraf": "^2.6.2", "rimraf": "^2.6.3",
"scrollama": "^2.0.0", "scrollama": "^2.0.0",
"simple-git": "^1.110.0", "simple-git": "^1.113.0",
"stylelint": "^10.0.0", "stylelint": "^10.0.1",
"stylelint-config-prettier": "^5.0.0", "stylelint-config-prettier": "^5.2.0",
"stylelint-config-rational-order": "^0.1.0", "stylelint-config-rational-order": "^0.1.2",
"stylelint-config-standard": "^18.2.0", "stylelint-config-standard": "^18.3.0",
"stylelint-declaration-block-no-ignored-properties": "^2.0.0", "stylelint-declaration-block-no-ignored-properties": "^2.1.0",
"stylelint-order": "^3.0.0", "stylelint-order": "^3.0.0",
"typescript": "~3.4.1", "typescript": "~3.5.1",
"unified": "^7.0.0", "unified": "^7.1.0",
"xhr-mock": "^2.4.1", "xhr-mock": "^2.4.1",
"xhr2": "^0.2.0" "xhr2": "^0.2.0"
}, },
@ -246,5 +247,11 @@
"es/**/style/*", "es/**/style/*",
"lib/**/style/*", "lib/**/style/*",
"*.less" "*.less"
],
"browserslist": [
"last 2 version",
"Firefox ESR",
"> 1%",
"ie >= 9"
] ]
} }

View File

@ -12,7 +12,7 @@ module.exports = {
'app.header.menu.spec': 'Guidelines', 'app.header.menu.spec': 'Guidelines',
'app.header.menu.resource': 'Resources', 'app.header.menu.resource': 'Resources',
'app.header.menu.mobile': 'Mobile', 'app.header.menu.mobile': 'Mobile',
'app.header.menu.pro': 'Ant Design Pro', 'app.header.menu.pro.v4': 'Ant Design Pro v4',
'app.header.menu.ecosystem': 'Ecosystem', 'app.header.menu.ecosystem': 'Ecosystem',
'app.header.lang': '中文', 'app.header.lang': '中文',
'app.content.edit-page': 'Edit this page on GitHub!', 'app.content.edit-page': 'Edit this page on GitHub!',

View File

@ -51,7 +51,8 @@ ul.toc > li {
.ant-affix { .ant-affix {
z-index: 9; z-index: 9;
max-height: ~'calc(100vh - 16px)'; max-height: ~'calc(100vh - 16px)';
overflow: auto; overflow-x: hidden;
overflow-y: auto;
background: #fff; background: #fff;
} }
} }

View File

@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { Link } from 'bisheng/router'; import { Link } from 'bisheng/router';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { Select, Menu, Row, Col, Icon, Popover, Input, Button } from 'antd'; import { Select, Menu, Row, Col, Icon, Popover, Input, Button, Badge } from 'antd';
import Santa from './Santa'; import Santa from './Santa';
import * as utils from '../utils'; import * as utils from '../utils';
import { version as antdVersion } from '../../../../package.json'; import { version as antdVersion } from '../../../../package.json';
@ -179,7 +179,11 @@ export default class Header extends React.Component {
<Menu.SubMenu <Menu.SubMenu
key="ecosystem" key="ecosystem"
className="hide-in-home-page" className="hide-in-home-page"
title={<FormattedMessage id="app.header.menu.ecosystem" />} title={
<Badge dot>
<FormattedMessage id="app.header.menu.ecosystem" />
</Badge>
}
> >
<Menu.Item key="pro"> <Menu.Item key="pro">
<a <a
@ -188,7 +192,9 @@ export default class Header extends React.Component {
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
<FormattedMessage id="app.header.menu.pro" /> <Badge dot>
<FormattedMessage id="app.header.menu.pro.v4" />
</Badge>
</a> </a>
</Menu.Item> </Menu.Item>
<Menu.Item key="ng"> <Menu.Item key="ng">

View File

@ -12,7 +12,7 @@ module.exports = {
'app.header.menu.spec': '设计语言', 'app.header.menu.spec': '设计语言',
'app.header.menu.resource': '资源', 'app.header.menu.resource': '资源',
'app.header.menu.mobile': '移动版', 'app.header.menu.mobile': '移动版',
'app.header.menu.pro': 'Ant Design Pro', 'app.header.menu.pro.v4': 'Ant Design Pro v4',
'app.header.menu.ecosystem': '生态', 'app.header.menu.ecosystem': '生态',
'app.header.lang': 'English', 'app.header.lang': 'English',
'app.content.edit-page': '在 GitHub 上编辑此页!', 'app.content.edit-page': '在 GitHub 上编辑此页!',

View File

@ -1,6 +1,7 @@
/* eslint no-param-reassign: 0 */ /* eslint no-param-reassign: 0 */
// This config is for building dist files // This config is for building dist files
const getWebpackConfig = require('antd-tools/lib/getWebpackConfig'); const getWebpackConfig = require('antd-tools/lib/getWebpackConfig');
const PacktrackerPlugin = require('@packtracker/webpack-plugin');
const { webpack } = getWebpackConfig; const { webpack } = getWebpackConfig;
@ -35,6 +36,15 @@ if (process.env.RUN_ENV === 'PRODUCTION') {
ignoreMomentLocale(config); ignoreMomentLocale(config);
externalMoment(config); externalMoment(config);
addLocales(config); addLocales(config);
// https://docs.packtracker.io/uploading-your-webpack-stats/webpack-plugin
config.plugins.push(
new PacktrackerPlugin({
project_token: '8adbb892-ee4a-4d6f-93bb-a03219fb6778',
upload: process.env.CI === 'true',
fail_build: true,
exclude_assets: name => !['antd.min.js', 'antd.min.css'].includes(name),
}),
);
}); });
} }