Compare commits

...

481 Commits
3.1.3 ... 3.4.4

Author SHA1 Message Date
afc163
b6a617f2e9 Fix ts error temporarily, DefinitelyTyped/DefinitelyTyped#25342 2018-04-28 15:02:25 +08:00
afc163
1a790a5a9f 3.4.4 2018-04-28 14:32:20 +08:00
afc163
2a411130bc Fix upload onChange arg type when beforeUpload return false, close #10293 2018-04-28 14:17:29 +08:00
Wu Haotian
bf22853f41 add lib/**/style/* as sideEffects (#10217) 2018-04-28 14:17:01 +08:00
愚指导
4101d182e0 Bump 3.4.3 (#10198) 2018-04-23 17:23:35 +08:00
薛定谔的猫
14dbcb95ed fix: sideEffects: false cause css file not bundled (fixes #10190) (#10197) 2018-04-23 17:08:24 +08:00
dependabot[bot]
14fa376dff Update majo requirement to ^0.6.2 (#10195)
Updates the requirements on [majo](https://github.com/egoist/majo) to permit the latest version.
- [Release notes](https://github.com/egoist/majo/releases)
- [Commits](https://github.com/egoist/majo/commits/v0.6.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-23 16:00:37 +08:00
Zheeeng
6a3e6f55cf Fix typo (#10193) 2018-04-23 16:00:24 +08:00
Wei Zhu
fa5491a390 Add @babel/types@7.0.0-beta.44 as devDependencies 2018-04-23 15:03:17 +08:00
Zheeeng
4ad5985df7 Prefer using 'truthy' over 'falsyless' (#10191) 2018-04-23 11:23:25 +08:00
Jiabin Peng
bb720aaab9 Fix menu item's clickable region in dark theme (#10187)
* remove redundant style for submenu

* Fix menu item's clickable region in dark theme
2018-04-23 00:31:36 +08:00
afc163
8ab4aeb9c4 site: fix ad flush 2018-04-22 22:37:58 +08:00
Benjy Cui
e444dc5e39 chore: add ad for yuque (#10182) 2018-04-22 18:58:40 +08:00
偏右
631596022e Add changelog for 3.4.2 (#10185)
* Add changelog for 3.4.2

* update
2018-04-22 17:21:58 +08:00
Wei Zhu
7ee2eca848 Pass CheckboxGroup/RadioGroup prefixCls down to children (#10002)
Close #9950
2018-04-22 16:35:34 +08:00
afc163
15c6d58796 Table getCheckboxProps should be updated when rerender
close #10133
2018-04-22 15:19:04 +08:00
afc163
2078354bc5 Fix collapsedWidth string bug, close #10140 2018-04-22 13:56:23 +08:00
Jin ZHANG
a95209cf55 scale fallback string (#10184) 2018-04-22 13:09:42 +08:00
yiminanci
26f35280a8 Update README-zh_CN.md (#10181) 2018-04-21 15:43:22 +08:00
afc163
f4ae9294c0 Improve card loading style, ref #9862 2018-04-20 11:19:30 +08:00
Zheeeng
572ae5ce14 Bugfix issue.9862 (#10052)
* Fix issue 9862

* Update Card test snapshot
2018-04-20 10:44:33 +08:00
Dmitry Gladkikh
0d0632b2f3 Add getPopupContainer method decl to MenuProps interface (#10158)
* add getPopupContainer to MenuProps

see https://github.com/ant-design/ant-design/issues/10145

* Update getPopupContainer signature of MenuProps

* getPopupContainer prop is optional
2018-04-19 20:33:12 +08:00
Wei Zhu
410fb50f44 site: use qingting 2018-04-19 18:05:27 +08:00
Wei Zhu
a9f4a6cc85 site: use https 2018-04-19 17:50:36 +08:00
Wei Zhu
163f2aae64 site: fix typo 2018-04-19 17:49:29 +08:00
Wei Zhu
05d6d80e3d site: more verbose redirects 2018-04-19 17:23:38 +08:00
Wei Zhu
1f39cbf36a site: Tweak redirects 2018-04-19 17:15:34 +08:00
Wei Zhu
9aa914922d site: Add more redirects 2018-04-19 17:08:49 +08:00
Wei Zhu
9ba7818b69 site: Add redirects 2018-04-19 16:56:40 +08:00
Wei Zhu
81adba222d site: set production build command 2018-04-19 16:41:06 +08:00
Wei Zhu
22bfc68f33 Remove ID 2018-04-19 16:39:18 +08:00
Wei Zhu
10aaee0e27 Copy netlify.toml to _site 2018-04-19 16:32:34 +08:00
VTHINKXIE
fbad7efacb doc: add stream compute user case (#10155)
* doc: add stream compute user case

* Update cases.en-US.md
2018-04-19 16:27:26 +08:00
Wei Zhu
bbf3163cc2 Add netlify.toml 2018-04-19 16:23:13 +08:00
Zheeeng
069e9207a9 Swap positions between List.footer and List.pagination (#10045)
* Swap positions between List.footer and List.pagination

* Update List test snapshots
2018-04-19 13:48:55 +08:00
afc163
649d733048 fix snapshot ci 2018-04-19 11:54:44 +08:00
Wu Haotian
7eb2792072 fix typing for Upload.beforeUpload (#10059)
* fix typing for `Upload.beforeUpload`
fix #9775

* add RcFile interface, fix tests

* fix typing of `Upload.onStart`
2018-04-19 11:54:28 +08:00
Zheeeng
d0d69fbf13 Remove useless style (#10054) 2018-04-19 11:50:28 +08:00
Wei Zhu
61e4f8011a Remove sCU from Form (#10029)
Related #9790

Form and Form.Item are not considered as pure components
2018-04-19 11:49:50 +08:00
Zen
d7f9270a6f fix button/demo/disabled.md (#10009)
add `ghost` property to ghost buttons
2018-04-19 11:43:22 +08:00
afc163
a7513bfac1 fix stylelint 2018-04-19 11:40:58 +08:00
afc163
f0660836b7 fix snapshot ci 2018-04-19 11:34:19 +08:00
afc163
d4a0cf8054 Merge branch 'master' of github.com:ant-design/ant-design 2018-04-19 11:09:27 +08:00
dependabot[bot]
1cc7ebc03b Update react-slick requirement to ~0.23.1 (#9948)
Updates the requirements on [react-slick](https://github.com/akiran/react-slick) to permit the latest version.
- [Release notes](https://github.com/akiran/react-slick/releases)
- [Changelog](https://github.com/akiran/react-slick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/akiran/react-slick/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-19 11:07:29 +08:00
dependabot[bot]
d0906c6661 Update stylelint requirement to 9.2.0 (#9897)
Updates the requirements on [stylelint](https://github.com/stylelint/stylelint) to permit the latest version.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/commits/9.2.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-19 11:07:05 +08:00
afc163
61502ef942 Fix form demo error in IE9 2018-04-18 14:08:06 +08:00
afc163
04b3aad451 Fix menu arrow style of disabled, close #10113 2018-04-18 13:47:40 +08:00
afc163
2604623b7e fix showInfo when precent is out of range 2018-04-18 11:10:32 +08:00
afc163
0eb835772d Fix invalid progress like <Progress precent={120} /> 2018-04-18 10:45:07 +08:00
Dmitry Manannikov
c0e60f8097 Fix wrong List property (#10123) (#10128)
This diff excludes `locale` from `rest` variable to
avoid passing to div.

Close #10123
2018-04-18 00:15:22 +08:00
Zheeeng
05a522c343 Update ButtonType (#10129) 2018-04-17 23:54:55 +08:00
Open Next
ad721111a4 fix bug in getting-started - date is null when clear the DatePick (#10111) 2018-04-17 16:49:11 +08:00
刘红
ee4f788ae0 添加BMP的支持 (#10110) 2018-04-17 14:44:43 +08:00
Jin ZHANG
f3f3c63c30 fix class for week date render (#10081) 2018-04-17 13:50:27 +08:00
afc163
3b00cf8971 Fix image when file.url has query or hash
close #10102
2018-04-17 13:49:03 +08:00
何志勇
7e8295769a Markdown error (#10100)
There are six preset values, not five
2018-04-17 10:50:14 +08:00
Pierre
09fec16b6f [TS] AutoComplete : Make dataSource optional (#10077)
When using children :
https://ant.design/components/auto-complete/#components-auto-complete-demo-options
2018-04-16 17:42:31 +08:00
dependabot[bot]
e5030dfa64 Update majo requirement to ^0.5.1 (#10069)
Updates the requirements on [majo](https://github.com/egoist/majo) to permit the latest version.
- [Release notes](https://github.com/egoist/majo/releases)
- [Commits](https://github.com/egoist/majo/commits/v0.5.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-16 16:00:24 +08:00
薛定谔的猫
63c0c2e38a chore: set sideEffects: false (#10043)
so webpack can do better tree-shaking.
2018-04-16 15:28:32 +08:00
Wei Zhu
1a26268bd5 Remove duplicate SpinSize 2018-04-16 15:02:03 +08:00
诸岳
265770b4e3 Fix incompatible type error for Spin[size] prop, close #10053 (#10055) 2018-04-16 14:44:42 +08:00
Rallets
8157be2f4a Add files via upload (#10068) 2018-04-16 14:16:43 +08:00
Albert 理斯特
b7411febce A: 新增关于 childrenColumnName 的文档,fix #9035 (#10062) 2018-04-16 13:26:33 +08:00
Ed Moore
31e50e50b6 Fix types (#10063)
* Fix types

Fix https://github.com/ant-design/ant-design/issues/8796

* Fix exported types
2018-04-16 10:58:17 +08:00
Charles Covey-Brandt
e1efa990ca Update Alert smooth-closed demo for spelling "visible" (#10060) 2018-04-16 09:41:53 +08:00
afc163
8fdce7cb4f test: remove bisheng:build test to speed up the progress 2018-04-15 17:27:30 +08:00
Zheeeng
b41af97d1f Fix typo (#10050) 2018-04-15 16:52:04 +08:00
偏右
88cacb6c35 Revert "Feature time line.reverse (#10026)" (#10056)
This reverts commit 92a07d1b9d.
2018-04-15 16:51:05 +08:00
Zheeeng
92a07d1b9d Feature time line.reverse (#10026)
* Add reverse api for Timeline

* Update TimeLine test snapshot
2018-04-15 16:50:02 +08:00
afc163
9b64a778d0 demo: fix console warning 2018-04-15 15:13:59 +08:00
afc163
4486c569f2 demo: update localeProvider demo 2018-04-15 15:11:59 +08:00
afc163
e1a5063daf test: fix ci warning 2018-04-15 15:10:25 +08:00
afc163
e3446840fa Fix test case of LocaleProvider
which is broken by #10047

use constructor over componentDidMount
2018-04-15 15:09:13 +08:00
Zheeeng
08f5c27b0b Use componentDidMount to replace componentWillMount: componentWillMount is deprecating (#10047) 2018-04-14 13:37:24 +08:00
Zheeeng
b92779f821 Fix the infinite & virtualized List is invisible that caused by its height can't be calculated (#10046) 2018-04-14 11:18:34 +08:00
afc163
92eeb7f8c9 Tweak list grid margin 2018-04-13 15:35:51 +08:00
afc163
2939aea4ec Fix list extra border, close #10028 2018-04-13 15:35:51 +08:00
afc163
5f51d8dc43 update demo 2018-04-13 15:35:51 +08:00
afc163
d94e7bd7f0 fix typo 2018-04-13 15:35:51 +08:00
Chenjia
5634881eda add docs for keyboard props on modal component #8818 (#10030) 2018-04-13 12:01:51 +08:00
Bill Fienberg
66f5e75cff Fix typo in link to InputNumber component (#9994)
Before:
>Synchronize with [InptNumber](/components/input-number/) component.

After:
>Synchronize with [InputNumber](/components/input-number/) component.
2018-04-11 23:18:10 +08:00
Wei Zhu
82b721a432 Extend CardProps from native div element attributes
Close #9933
2018-04-11 19:41:54 +08:00
Wei Zhu
f9b8bf7e4d Revert "Checkbox[disabled] should have higher priority than Checkbox.Group[disabled]"
This reverts commit 5580791a70.
2018-04-11 16:59:22 +08:00
Wei Zhu
5580791a70 Checkbox[disabled] should have higher priority than Checkbox.Group[disabled]
Fix #9973
2018-04-11 16:35:05 +08:00
Bill Fienberg
833e076eb7 Fix typo (#9991)
Before:
>Customerize tooltip

After:
>Customize tooltip
2018-04-11 15:49:12 +08:00
afc163
3612144c6d site: avoid hash jump in demo 2018-04-11 15:15:24 +08:00
Wei Zhu
2a5479a524 Fix type errors
Close #9988
2018-04-11 12:01:28 +08:00
zombiej
0437d858f2 update testcase sync with Tree 1.8.12. Ref: https://github.com/ant-design/ant-design/issues/9899 2018-04-10 19:29:18 +08:00
Wei Zhu
921361313a Add explicit types for default props
Fix #8796
Close #8820
2018-04-10 10:50:59 +08:00
jim
a5e2020908 add icon prop in .d.ts 2018-04-09 14:22:06 +08:00
ddcat1115
9578083b92 update changelog 2018-04-08 22:12:25 +08:00
ddcat1115
0f01459d77 bump 3.4.1 2018-04-08 18:25:27 +08:00
afc163
e8d8741ec5 Fix divider layout with float elements, close #9956 2018-04-08 12:37:24 +08:00
偏右
a7f898e4b2 Update zh-CN.js 2018-04-08 00:20:57 +08:00
Wei Zhu
43537ed368 Fix type error
Close #9931
2018-04-04 17:51:51 +08:00
偏右
a9376ef1ca Fix image url display with non-image extention in Upload (#9936)
now we treat url following below rules:

1. `data:image..` => image
2. `http://xxx.com/xxxx.(webp|svg|png|gif|jpg|jpeg)` => image
3. `http://xxx.com/xxx.zip` other extensions => non-image
4. `data:application..` other minetypes in base64 text => non-image
5. `http://xxx.com/xxx` without any extensions => image

close #9835

close #9681

ref #9621
2018-04-04 17:17:01 +08:00
zombieJ
49719b20d8 update tree doc for customize icon (#9893)
* update doc for customize icon
* add test case
2018-04-04 16:39:50 +08:00
ddcat1115
1612ef6990 fix #9882 2018-04-04 16:01:14 +08:00
afc163
e6b3490a8e fix test case 2018-04-04 15:50:08 +08:00
ddcat1115
a402fdd8b3 fix #9907 (#9908)
* fix #9907

* update snapshot
2018-04-04 15:29:59 +08:00
dependabot[bot]
d71834011c Update eslint-plugin-babel requirement to ^5.0.0 (#9896)
Updates the requirements on [eslint-plugin-babel](https://github.com/babel/eslint-plugin-babel) to permit the latest version.
- [Release notes](https://github.com/babel/eslint-plugin-babel/releases)
- [Commits](https://github.com/babel/eslint-plugin-babel/commits/v5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-04 15:08:21 +08:00
Wei Zhu
5336bd688f Fix type error 2018-04-04 14:49:14 +08:00
André
245e1cf3d0 Minor typo (#9922)
Fixes minor typo
2018-04-03 22:00:31 +08:00
afc163
cab162b562 doc: update divider doc and demo 2018-04-03 14:25:47 +08:00
afc163
779a35e4cc doc: update message duration description 2018-04-03 13:41:44 +08:00
afc163
bf6e91be3a Tweak table sorter icon click area again 2018-04-03 11:33:37 +08:00
Nokecy
98d56b2dd0 Fixed typescript definition and add table props onHeaderRow (#9902) 2018-04-02 17:15:17 +08:00
dependabot[bot]
2807d75937 Update enquire-js requirement to ^0.2.1 (#9895)
Updates the requirements on [enquire-js](https://github.com/jljsj/enquire-js) to permit the latest version.
- [Release notes](https://github.com/jljsj/enquire-js/releases)
- [Commits](https://github.com/jljsj/enquire-js/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-04-02 15:42:34 +08:00
Wei Zhu
ef3f10ab8e docs: Remove extra whitespace 2018-04-01 21:15:50 +08:00
Wei Zhu
98685ae20e Lock stylelint to 9.1.3 2018-04-01 20:49:03 +08:00
Wei Zhu
ce7c9438b8 Bump 3.4.0 2018-04-01 20:43:45 +08:00
Wei Zhu
266c8ad17c docs: Add emoji 2018-04-01 20:35:56 +08:00
Wei Zhu
5e52247083 docs: Update changelog
skip ci
2018-04-01 20:33:45 +08:00
Wei Zhu
7fa8364caf Add 3.4.0 changelog (#9890) 2018-04-01 17:57:02 +08:00
Wei Zhu
bac892080d Merge branch 'feature-3.4.0' 2018-04-01 12:28:09 +08:00
Zach Guo
280f907297 Fix Layout.Sider typos (#9885) 2018-04-01 01:15:42 +08:00
Wei Zhu
da4062f9c1 Add Anchor[getContainer] (#9694) 2018-03-30 15:55:54 +08:00
Hughen
53abf888cb fix: fixed modal content overflowed
- fixed modal content overflowed, when the very long english
  word fill in Modal title
2018-03-30 15:33:33 +08:00
Wei Zhu
c4698154b4 Merge branch 'master' into feature-3.4.0 2018-03-30 15:09:38 +08:00
afc163
134e60fe2b site: fix color index 2018-03-30 11:20:13 +08:00
Wei Zhu
502e7df2e5 Update snapshot for React 16.3 2018-03-30 11:04:49 +08:00
zombiej
c135572730 Fix conduct logic on node disabled, update test snapshot 2018-03-29 19:46:01 +08:00
zombiej
08b6011ed7 update deps of rc-tree 2018-03-29 18:09:54 +08:00
zombiej
c6475ce4bf Merge branch 'master' of github.com:ant-design/ant-design 2018-03-29 18:04:55 +08:00
zombiej
c5f84c7902 clean up 2018-03-29 18:03:14 +08:00
dependabot[bot]
0377f18b23 Update typescript requirement to ~2.8.1 (#9843)
Updates the requirements on [typescript](https://github.com/Microsoft/TypeScript) to permit the latest version.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/commits/v2.8.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-29 17:59:50 +08:00
zombiej
52f0ac10a4 Revert "Fix WeekPick style prop, close #9848"
This reverts commit c526e175c7.
2018-03-29 17:53:54 +08:00
zombiej
0baef252bb update deps of rc-tree 2018-03-29 16:03:48 +08:00
afc163
c526e175c7 Fix WeekPick style prop, close #9848 2018-03-29 11:26:38 +08:00
Scott Sturgeon
f2e60209c9 Changed zero-width layout trigger color to use layout-trigger-color var (#9851) 2018-03-29 10:50:58 +08:00
Kenneth Luján Rosas
d7b44bda07 Fixes LocaleProvider moment usage (#9853) 2018-03-29 10:42:33 +08:00
Wei Zhu
0d2a6c4ed9 Update ISSUE_TEMPLATE.md 2018-03-28 12:15:02 +08:00
jojoLockLock
7915e58f1f fix base.less @at-root syntax error (#9832) 2018-03-28 10:41:54 +08:00
Wei Zhu
70ea209857 docs: Clarify Table[scroll] useage
Related issue:

https://github.com/ant-design/ant-design/issues/2203
https://github.com/ant-design/ant-design/issues/2130
2018-03-27 17:46:01 +08:00
jljsj
a7107c6adf fix site icon hover transition 2018-03-27 15:40:31 +08:00
zombiej
d5d348d2d1 update change log 2018-03-27 09:48:26 +08:00
Wei Zhu
c4480145b4 docs: Add link of "Theming Ant Design with Sass and Webpack>"
Close #9815
2018-03-26 21:36:02 +08:00
afc163
c3f70f57ac renew AUTHORS.txt 2018-03-26 19:26:17 +08:00
afc163
e400ef6d30 site: fix extra space in page bottom 2018-03-26 16:53:02 +08:00
afc163
2d4d85bdbc update snapshot 2018-03-26 15:47:29 +08:00
pellea
b61f4c1ad3 fix code sample in the Form component doc (issue #9591) (#9705)
* fix code sample in the Form component doc (issue #9591)

* fix wrong space indent

* add trailing comma
2018-03-26 15:41:42 +08:00
dependabot[bot]
31bce60530 Update react-slick requirement to ~0.22.3 (#9812)
Updates the requirements on [react-slick](https://github.com/akiran/react-slick) to permit the latest version.
- [Release notes](https://github.com/akiran/react-slick/releases)
- [Changelog](https://github.com/akiran/react-slick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/akiran/react-slick/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-26 15:41:05 +08:00
偏右
f6f5fb3672 Test case for warning message of importing all components (#9814)
* Add test case

* fix test case
2018-03-26 15:36:44 +08:00
afc163
1abe1517d8 Add deer tracking code 2018-03-26 15:35:39 +08:00
afc163
99cc5b9607 site: add search input in home page 2018-03-26 15:32:48 +08:00
afc163
e7ba4fb3f0 remove unused comment 2018-03-26 15:04:36 +08:00
gregahren
b6ce947894 Slovenian locale added (sl_SI) (#9724)
* Add sl_SI locale (Slovenian)

* fix lint issues
snapshot tests

* add description

* bump rc pagination to 1.16.1 which includes sl_SI(Slovenian) locale
then include it
2018-03-26 11:44:27 +08:00
Wei Zhu
f6be27fd4e docs: Update changelog 2018-03-25 12:00:33 +08:00
Wei Zhu
738eb28505 Bump 3.3.3 2018-03-25 11:46:43 +08:00
Wei Zhu
5ab1c4ce53 Revert "Convert file object"
This reverts commit ee0bf41672.
2018-03-25 11:40:51 +08:00
afc163
99e030cc4c Merge branch 'master' into feature-3.4.0 2018-03-25 01:39:27 +08:00
Bryan Berger
c3df0bc688 Fix <Switch /> small margin (#9602)
* should be 13px. Size of the circle (12px) + desired spacing (1px).

* add single responsibility var
2018-03-24 21:52:47 +08:00
Wei Zhu
51d1f27a76 dcos: Detail Select[optionLabelProp] default value
Close #9745
2018-03-24 21:38:25 +08:00
meesvandongen
2c5231f0ed Made expanded row background (table) a less variable. (#9789) 2018-03-24 13:18:38 +08:00
Jonny Buchanan
d7086ce193 Add nwb example to the "other boilerplates" docs (#9787) 2018-03-24 13:05:13 +08:00
zombiej
c74ef5d40a bump 3.3.2 2018-03-24 12:47:48 +08:00
afc163
4502ad8376 Fix button two-chinese-words update bug 2018-03-23 22:23:03 +08:00
afc163
07d6988f0d Add some tests 2018-03-23 19:19:29 +08:00
afc163
ba7b7d0d6b link colors should be related with @link-color 2018-03-23 18:04:02 +08:00
afc163
ec6f370d8d update snapshot 2018-03-23 15:29:02 +08:00
afc163
caf497d08f Fix underline of Button[href], close #9755 2018-03-23 14:45:08 +08:00
Yunus EŞ
9413f20ef6 Pagination Turkish Update (#9679) 2018-03-23 14:21:32 +08:00
afc163
454567dee4 remove !important 2018-03-23 11:45:39 +08:00
Wei Zhu
827746efd7 Revert "Lock postcss-less version"
This reverts commit 64cbf0910a.
2018-03-23 11:25:00 +08:00
Wei Zhu
ee0bf41672 Convert file object
Close #9775
2018-03-23 11:23:47 +08:00
Jiabin Peng
6c77d336d9 Fix menu item clickable region (#9666) 2018-03-22 15:14:53 +08:00
Sangle
eb338425fe docs: fix syntax error (#9764) 2018-03-22 14:54:46 +08:00
Wei Zhu
64cbf0910a Lock postcss-less version
https://github.com/shellscape/postcss-less/issues/99
2018-03-21 20:52:52 +08:00
诸岳
aadba9b0e3 docs: add align prop description (#9749) 2018-03-21 17:42:19 +08:00
afc163
f8f52b09be Fix Modal.confirm content layout
close #9374

created a BFC to resolve multiple lines of title render bug

https://www.smashingmagazine.com/2017/12/understanding-css-layout-block-formatting-context/
2018-03-21 17:35:31 +08:00
ViviaRui
82711504a4 Update customize-theme.zh-CN.md (#9753) 2018-03-21 16:47:00 +08:00
Wei Zhu
edbbaac5f9 Fix date mocking
new Date returns a UTC time in node

Close #9743
2018-03-21 12:27:41 +08:00
Wei Zhu
1c0b5ed21e Revert "Update snapshot"
This reverts commit 98356e87ff.
2018-03-21 12:01:58 +08:00
zhuyue
98356e87ff Update snapshot 2018-03-21 10:51:52 +08:00
zhuyue
3dcab8767a fix: cursor style of disabled Rate should be default, close #9747 2018-03-21 10:30:25 +08:00
afc163
a1d1ca4dc6 update snapshot 2018-03-19 15:40:43 +08:00
afc163
b880549d59 upgrade react-slick to 0.21.0, close #3659 2018-03-19 14:56:16 +08:00
jim
8b922bcfb1 upgrade version 2018-03-19 14:24:43 +08:00
Wei Zhu
04ff6ed768 docs: Update TreeSelect labelInValue description
Close #9726
2018-03-19 14:20:47 +08:00
陈帅
a915a29a0d add 3.3.1 doc in change log (#9718)
add 3.3.1 doc in change log
2018-03-19 14:05:16 +08:00
afc163
29cb526cd7 fix readme link 2018-03-18 15:38:19 +08:00
Bryan Berger
a0e161ccdd Add variable for Pagination font-weight when active (#9603) 2018-03-18 13:06:00 +08:00
Wei Zhu
0d9dcb1714 Fix table scroll x (#9704) 2018-03-18 12:58:33 +08:00
Wei Zhu
381b88e9b0 Tweak table border radius (#9674)
Close #6750
2018-03-18 11:14:31 +08:00
afc163
411181e6ec doc: update practical-project 2018-03-17 18:07:33 +08:00
afc163
50aae9408e doc: update getting-started 2018-03-17 15:18:45 +08:00
afc163
540b31fd02 update features 2018-03-16 13:35:43 +08:00
afc163
fef1ba1ff3 update README.md 2018-03-15 15:12:21 +08:00
afc163
606475c767 Add context menu component to recommend list 2018-03-15 15:12:21 +08:00
Benjy Cui
9d7d70becd docs: should not use ref for wrapped form, close: #9598 (#9685) 2018-03-15 14:40:47 +08:00
afc163
554dec3bab update table demo 2018-03-15 14:30:01 +08:00
Wei Zhu
7392bf4590 Remove @babel/types 2018-03-15 11:59:46 +08:00
afc163
8db3b1f46f update snapshot 2018-03-15 11:42:42 +08:00
nestoralonso
43d7be5478 Update fixed-columns.md (#9680)
Fix typo scoll.x => scroll.x
2018-03-15 10:30:23 +08:00
Terence
4458f3dde1 Fix missing key of column.title in Table (#9658) (#9670) 2018-03-14 17:46:56 +08:00
jiang
76994bd772 Remove Form Item help transition, fix #8831 (#9675)
* fix #8831

* remove help transition
2018-03-14 17:43:02 +08:00
afc163
37506b238f sync placeholder node size when node is sticky by Affix, close #9536 2018-03-14 16:22:45 +08:00
Wei Zhu
aa97310421 Update ISSUE_TEMPLATE.md 2018-03-14 12:25:34 +08:00
afc163
eb2290a87f Tweak table sort icons position 2018-03-14 11:54:32 +08:00
Wu Haotian
0754845aff MenuItem: avoid rendering Tooltip unless necessary (#9636)
* MenuItem: avoid rendering Tooltip unless necessary

* MenuItem: remove extra check for tooltip.title
2018-03-14 11:13:06 +08:00
VTHINKXIE
0070628fa8 style(module:form): narrow css selector (#9648) 2018-03-14 11:08:07 +08:00
Wei Zhu
85c78e49a9 Fix TimePicker isMoment call 2018-03-13 22:53:02 +08:00
afc163
8b1d0224cb Tweak danger button focus style 2018-03-13 18:20:12 +08:00
拷钉
d3c57f09ea doc webpackrc (#9651) 2018-03-13 13:42:12 +08:00
Wei Zhu
f402e87fe0 docs: Add afterClose
Close #9640
2018-03-13 11:40:11 +08:00
afc163
4f1f5fd152 update form demo style 2018-03-12 21:52:13 +08:00
afc163
b28b394bf8 Fix test case for #9639 2018-03-12 21:02:20 +08:00
afc163
66c3108565 should support custom button node in Search[enterButton]
close #9639
2018-03-12 20:51:04 +08:00
afc163
fc99a6a436 site: use ant-design-palettes 2018-03-12 17:11:41 +08:00
zhuyue
463c3b0906 Bump 3.3.0 2018-03-12 15:40:45 +08:00
Wei Zhu
a0f9150b20 Update ISSUE_TEMPLATE.md 2018-03-12 15:23:31 +08:00
诸岳
5766c5e15b Add changelog of 3.3.0 (#9620) 2018-03-12 15:18:42 +08:00
Junbin Huang
869d572c6e docs: add layout.md translation (#9593) 2018-03-12 13:50:45 +08:00
Junbin Huang
3bca8f3055 docs: translate font.md (#9587) 2018-03-12 13:43:56 +08:00
Wei Zhu
62c9dee43e Remove timezone from mock date 2018-03-12 11:22:59 +08:00
王集鹄
decb6d8390 Compatible with non-image format file preview in UploadList (#9621)
* Compatible with non-image format file preview in UploadList

* Add unit test about Upload List should non-image format file preview
2018-03-11 22:24:09 +08:00
zhuyue
ed70ba694e Merge branch 'feature-3.3.0' 2018-03-11 14:50:25 +08:00
诸岳
40e7e0c193 Fix: successPercent should decide the progress status when it exists, close #9382 (#9614)
* fix: successPercent should decide the progress status when it exists, close #9382

* Add test for e361df0 that successPercent should decide the progress status when it exists
2018-03-11 00:11:52 +08:00
诸岳
398788b2c9 Fix: import correct locale file from rc-calendar, close #9373 (#9613)
* fix: import correct locale file from rc-calendar, close #9373

* Update snapshot
2018-03-11 00:11:21 +08:00
Wei Zhu
c5fc656ec8 Fix date mocking
Close #9599

It's an interesting bug, the time we store in the snapshot is in the summertime when you run it in wintertime, it fails.
2018-03-10 17:25:28 +08:00
u3u
30fe88d4bd Add the defaultActiveTabKey property for the Card component (#9526)
* Add the defaultActiveTabKey property for the Card component (close #8789, #8942)

* `activeTabKey` should be added

* Improve

* Fix large tabs font size, close #9509

* docs: Add TreeSelect[dropdownClassName]

* Fix passing dropdownClassName to tree-select

* build: update remark-parse requirement to ^5.0.0 (#9545)

Updates the requirements on [remark-parse](https://github.com/remarkjs/remark) to permit the latest version.
- [Release notes](https://github.com/remarkjs/remark/releases)
- [Commits](https://github.com/remarkjs/remark/commits/remark@5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>

* add Tooltip  contextMenu doc

* Improve Grid and Layout type definition

* fix: focus editor (#9548)

* Fix test case for new jsdom (#9527)

* Fix test case for new jsdom

* use setTimeout as raf in jest jsdom

* Fix cancelAnimationFrame

* Add comment for facebook/jest#5147

* longer timeout

* fix snap

* upgrade antd-tools

* Update typescript requirement to ~2.7.2 (#9522)

Updates the requirements on [typescript](https://github.com/Microsoft/TypeScript) to permit the latest version.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/commits/v2.7.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>

* Fix a ts error

* build: update react-slick requirement to ~0.20.0 (#9543)

Updates the requirements on [react-slick](https://github.com/akiran/react-slick) to permit the latest version.
- [Changelog](https://github.com/akiran/react-slick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/akiran/react-slick/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>

* Fix test cases

* site: fix intersection-observer polyfill

* docs: update recommendation

* Fix typo WeexPickerProps -> WeekPickerProps (#9564)

* use lodash

* Fixed typo on Visualization rules (#9575)

Style of a navigation should conform to the its level.

should be

Style of a navigation should conform to its level.

* Improve Radio/Checkbox type definition

Close #9574

* Remove AbstractCheckboxChangeEvent, fix TS4029 error

See https://github.com/Microsoft/TypeScript/issues/9944

* Update index.en-US.md (#9579)

* add transitionName from message.config (#9580)

* add transitionName from message.config

* Update index.en-US.md (#9579)

* modify doc

* build: update react-virtualized requirement to ~9.18.5 (#9544)

Updates the requirements on [react-virtualized](https://github.com/bvaughn/react-virtualized) to permit the latest version.
- [Changelog](https://github.com/bvaughn/react-virtualized/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bvaughn/react-virtualized/commits/9.18.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>

* When treeNode is disabled, its switcher is highlight and clickabled (#9539)

* When treeNode is disabled, its switcher is highlight and clickabled

* rc-tree@1.7.11

* Fix moment require (#9528)

Fix #9502

* Update snapshot
2018-03-10 14:44:12 +08:00
Wei Zhu
b6d7151486 docs: Document Calendar[validRange] 2018-03-09 17:55:49 +08:00
Wei Zhu
7f5f09ff47 Add more tests for Calendar[validRange] 2018-03-09 17:43:13 +08:00
Rohan Malhotra
71f65a0be8 Added validRange props in calendar to control date range 2018-03-09 17:42:54 +08:00
Camol
2aed46012e [feature]: add native Event - related to #9368 (#9376)
* [feature]: add native Event - related to #9368

* update tests and rc-checkbox's version
2018-03-09 15:16:57 +08:00
Wei Zhu
fe4d294c64 Fix moment require (#9528)
Fix #9502
2018-03-09 15:04:21 +08:00
valleykid
ae78a4bbec When treeNode is disabled, its switcher is highlight and clickabled (#9539)
* When treeNode is disabled, its switcher is highlight and clickabled

* rc-tree@1.7.11
2018-03-09 15:04:09 +08:00
SimpleFrontend
528c6fa1e0 Added pendingDot to Timeline (#9546)
* Added selectionColumnWidth to TableRowSelection

* Updated documents

* Renamed selectionColumnWidth to columnWidth

* Added pendingDot to Timeline

* Added pendingDot to Timeline

* Minor update according to the feedback

* Updated according to feedback
2018-03-09 15:03:19 +08:00
Hughen
6998f66eb5 feat: add afterClose to Alert (#9448)
- add afterClose to Alert, in in order to achieve smoothly unmount.
2018-03-09 15:02:13 +08:00
dependabot[bot]
5157b7b8a2 build: update react-virtualized requirement to ~9.18.5 (#9544)
Updates the requirements on [react-virtualized](https://github.com/bvaughn/react-virtualized) to permit the latest version.
- [Changelog](https://github.com/bvaughn/react-virtualized/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bvaughn/react-virtualized/commits/9.18.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-09 14:59:53 +08:00
MuYu
f61967b496 add transitionName from message.config (#9580)
* add transitionName from message.config

* Update index.en-US.md (#9579)

* modify doc
2018-03-09 13:30:50 +08:00
Kevin BON
b1bcf842d7 Update index.en-US.md (#9579) 2018-03-09 00:48:23 +08:00
Xoce51
e142bce0a0 Update documentation to match with the select search method #9494 (#9577) 2018-03-09 00:47:38 +08:00
Wei Zhu
473872af66 Remove AbstractCheckboxChangeEvent, fix TS4029 error
See https://github.com/Microsoft/TypeScript/issues/9944
2018-03-08 21:42:22 +08:00
Wei Zhu
f78e0098fa Improve Radio/Checkbox type definition
Close #9574
2018-03-08 20:39:34 +08:00
Angga
43e4622ef8 Fixed typo on Visualization rules (#9575)
Style of a navigation should conform to the its level.

should be

Style of a navigation should conform to its level.
2018-03-08 19:14:41 +08:00
afc163
e071002fae use lodash 2018-03-08 14:46:47 +08:00
Pierre
1259d703c7 Fix typo WeexPickerProps -> WeekPickerProps (#9564) 2018-03-07 23:56:24 +08:00
afc163
d40d59ab68 docs: update recommendation 2018-03-07 15:59:02 +08:00
afc163
468a7629e7 site: fix intersection-observer polyfill 2018-03-07 15:56:40 +08:00
愚道
59b7195c06 Merge branch 'master' into feature-3.3.0 2018-03-07 14:17:43 +08:00
afc163
15e69d09ca Fix test cases 2018-03-06 21:47:05 +08:00
dependabot[bot]
324e07fbf0 build: update react-slick requirement to ~0.20.0 (#9543)
Updates the requirements on [react-slick](https://github.com/akiran/react-slick) to permit the latest version.
- [Changelog](https://github.com/akiran/react-slick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/akiran/react-slick/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-06 21:29:54 +08:00
afc163
2f427e172a Fix a ts error 2018-03-06 21:28:54 +08:00
dependabot[bot]
442673a934 Update typescript requirement to ~2.7.2 (#9522)
Updates the requirements on [typescript](https://github.com/Microsoft/TypeScript) to permit the latest version.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/commits/v2.7.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-06 21:28:35 +08:00
偏右
8226ede38e Fix test case for new jsdom (#9527)
* Fix test case for new jsdom

* use setTimeout as raf in jest jsdom

* Fix cancelAnimationFrame

* Add comment for facebook/jest#5147

* longer timeout

* fix snap

* upgrade antd-tools
2018-03-06 21:21:01 +08:00
陆离
cc06f0f7a5 fix: focus editor (#9548) 2018-03-06 20:59:03 +08:00
Wei Zhu
518c424ca4 Improve Grid and Layout type definition 2018-03-06 15:51:06 +08:00
jim
26934b37c8 add Tooltip contextMenu doc 2018-03-06 15:21:37 +08:00
dependabot[bot]
8466028b5a build: update remark-parse requirement to ^5.0.0 (#9545)
Updates the requirements on [remark-parse](https://github.com/remarkjs/remark) to permit the latest version.
- [Release notes](https://github.com/remarkjs/remark/releases)
- [Commits](https://github.com/remarkjs/remark/commits/remark@5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-06 15:14:43 +08:00
Wei Zhu
69b154f9a9 Fix passing dropdownClassName to tree-select 2018-03-06 11:23:03 +08:00
Wei Zhu
56e4ce099d docs: Add TreeSelect[dropdownClassName] 2018-03-06 10:43:56 +08:00
afc163
c7dd7cbbc4 Fix large tabs font size, close #9509 2018-03-05 18:35:33 +08:00
SimpleFrontend
9073237e70 Added selectionColumnWidth to TableRowSelection (#9474)
* Added selectionColumnWidth to TableRowSelection

* Updated documents

* Renamed selectionColumnWidth to columnWidth
2018-03-05 18:23:01 +08:00
dependabot[bot]
c611fe74c0 Update remark-stringify requirement to ^5.0.0 (#9523)
Updates the requirements on [remark-stringify](https://github.com/remarkjs/remark) to permit the latest version.
- [Release notes](https://github.com/remarkjs/remark/releases)
- [Commits](https://github.com/remarkjs/remark/commits/remark@5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-05 15:46:16 +08:00
dependabot[bot]
d250f35cf3 Update jest requirement to ^22.4.2 (#9521)
Updates the requirements on [jest](https://github.com/facebook/jest) to permit the latest version.
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v22.4.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-05 15:44:36 +08:00
dependabot[bot]
765beb7570 Update lint-staged requirement to ^7.0.0 (#9519)
Updates the requirements on [lint-staged](https://github.com/okonet/lint-staged) to permit the latest version.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/commits/v7.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-05 15:41:01 +08:00
Wei Zhu
c0e9a22fa9 Update snapshot 2018-03-05 11:23:26 +08:00
dependabot[bot]
3793412e6d Update eslint-plugin-react requirement to 7.7.0 (#9506)
Updates the requirements on [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) to permit the latest version.
- [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases)
- [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yannickcr/eslint-plugin-react/commits/v7.7.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-04 18:06:02 +08:00
dependabot[bot]
5839c852a4 Update stylelint requirement to ^9.1.1 (#9508)
Updates the requirements on [stylelint](https://github.com/stylelint/stylelint) to permit the latest version.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/commits/9.1.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-04 18:05:50 +08:00
dependabot[bot]
b2bb35b13d Update react-slick requirement to ~0.19.0 (#9504)
Updates the requirements on [react-slick](https://github.com/akiran/react-slick) to permit the latest version.
- [Release notes](https://github.com/akiran/react-slick/releases)
- [Changelog](https://github.com/akiran/react-slick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/akiran/react-slick/commits/0.19.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-04 17:45:38 +08:00
dependabot[bot]
192c6bbb38 Update scrollama requirement to ^1.4.1 (#9507)
Updates the requirements on [scrollama](https://github.com/russellgoldenberg/scrollama) to permit the latest version.
- [Commits](https://github.com/russellgoldenberg/scrollama/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-03-04 17:44:57 +08:00
afc163
af8e54f1d6 Fix table radius in chrome 2018-03-03 16:42:48 +08:00
afc163
a2018e7c44 site: fix scroll to current hash in chrome 2018-03-03 16:42:48 +08:00
偏右
d0c58946ee Update README.md 2018-03-03 15:35:30 +08:00
Arnab Sen
d40a3408c6 Corrected typo (#9490) 2018-03-02 22:19:10 +08:00
愚指导
cdfbb6a3bd Bump 3.2.3 2018-03-02 20:12:06 +08:00
Sam Chen
fd147deb75 Update input group demo (#9482) 2018-03-02 15:26:05 +08:00
afc163
2fe64d429a Fix button group align issue in chrome, close #1019 2018-03-02 15:25:31 +08:00
Wei Zhu
5e7bff8b5e Update snapshot 2018-03-02 14:12:30 +08:00
byuanama
98f938798d Update index.en-US.md (#9479) 2018-03-02 13:18:06 +08:00
Wei Zhu
a4fea8f22c docs: Add Table pagination position to demo 2018-03-02 12:35:25 +08:00
afc163
7d3573d471 use more clear function name, close #9465 2018-03-02 12:06:33 +08:00
Camol
ae2990e241 feature: [Table] Pagination on the top in addition to the bottom. fix… (#9357)
* feature: [Table] Pagination on the top in addition to the bottom. fix (#9346)

* refactor pagination of table (#9357)

* specify the position of pagination when using table  - add test

* specify the position of pagination when using table - update API docs

* update api docs

* fix error

* add TablePaginationConfig extends PaginationProps
2018-03-02 12:00:28 +08:00
愚指导
2548a4bcf9 add polyfill for ie (#9444) 2018-03-02 11:49:56 +08:00
twobin
d816879e78 fix: add props of onPopupScroll in Select (#9475) 2018-03-02 10:15:01 +08:00
Chang Wang
c51f041ebc Update downloads badge to point to graph of downloads (#9477) 2018-03-02 10:13:48 +08:00
Karthik K
f24e41806d Minor punctuation correction (#9472) 2018-03-01 22:08:31 +08:00
Wei Zhu
1b3118e1dc Use week year
Fix #9463
2018-03-01 17:24:06 +08:00
Wei Zhu
9634bea391 Complicate with less 3
Fix #7850
2018-02-28 14:35:02 +08:00
afc163
8a6b76acde support less vars for tabs title font size 2018-02-28 11:07:26 +08:00
afc163
bea95bf77c Merge branch 'master' into feature-3.3.0 2018-02-28 10:56:45 +08:00
VTHINKXIE
23e7716137 fix(module:timeline): fix timeline head custom style error in chrome (#9429) 2018-02-27 20:44:28 +08:00
Wei Zhu
755b3e9043 Fix Select dropdown box-radius
refer 82092c15
2018-02-27 18:27:31 +08:00
Wei Zhu
aa9b7a4e4d Update snapshot 2018-02-27 18:07:39 +08:00
Wei Zhu
82092c154a Fix Select dropdown border 2018-02-27 17:21:33 +08:00
afc163
40e354c373 Merge branch 'master' into feature-3.3.0 2018-02-27 10:12:19 +08:00
Wei Zhu
5df04e6827 Fix lint 2018-02-26 17:24:55 +08:00
Wei Zhu
54242e968f Set Table filter dropdown menu popup container
Fix #9209
2018-02-26 16:45:26 +08:00
afc163
d4a5d2c188 site: fix home button align 2018-02-26 13:54:09 +08:00
afc163
e6a5c9be9e update 2018-02-25 13:20:52 +08:00
valleykid
07a0a1f336 Changelog of 3.2.2 (#9409) 2018-02-25 08:38:10 +08:00
valleykid
eab4fdfe95 Update snapshot 2018-02-25 07:57:23 +08:00
Ivan Kravets
86ab00fbbd Use default background for button states (#9411) 2018-02-24 22:25:50 +08:00
Wei Zhu
c28d6f1624 Remove table overflow:hidden, fix #7799 2018-02-24 11:46:46 +08:00
Mathew
947cee4475 fix issue #9359 (#9364)
* fix issue #9359

* fix trailing whitespaces
2018-02-24 11:40:44 +08:00
MinJeong Kim
feaf238dfa fix: set -has-trigger class in sider when -trigger div exists (#9399)
* fix: set `-has-trigger` class in sider when `-trigger` div exists

* fix: fix template expr lint error
2018-02-24 10:35:04 +08:00
Wei Zhu
f1fd85780e Revert "fix type of column dataIndex (#9298)"
This reverts commit f8e996ee8e.

Close #9393
2018-02-22 15:56:37 +08:00
Wei Zhu
dc439bd7c3 Remove generic type from ComponentDecorator, fix #9331 2018-02-22 15:52:35 +08:00
Wei Zhu
2c95ea0e5e docs: document Tabs[onChange] argument
Close #9386
2018-02-22 10:44:53 +08:00
Wei Zhu
aeeebab9d9 Upgrade @babel/types 2018-02-21 18:42:13 +08:00
Wei Zhu
a6ffd332fa docs: fix parameter 2018-02-16 15:20:25 +08:00
Christopher Deutsch
97b09b393b onKeyPress and onKeyDown got the wrong type in #9316 (#9365) 2018-02-15 13:10:35 -06:00
Wei Zhu
a438b9b33f Add spin dot className to custom indicator 2018-02-14 12:56:22 +08:00
Wei Zhu
7d5db31e67 Fix table custom spin indicator
Fix #9355
2018-02-14 12:56:22 +08:00
George Gray
053396810b add @badge-font-weight var (#9352) 2018-02-14 12:35:52 +08:00
George Gray
676635abde var to theme pagination font (#9351) 2018-02-13 21:38:34 +08:00
Dimitri Mitropoulos
c92cf5b778 adds missing argument in Select onChange prop (#9332)
* adds missing argument in Select onChange prop

from the docs: 
`function(value, option:Option/Array<Option>)`

also, (from reality) the callback really does send an option or options array.

* updates type to use ReactElement instead of Object
2018-02-13 07:33:25 -06:00
Arvin Xu
2a1612b0c2 📖 Fix misspelling and blank (#9348)
修改个错别字,补充两处盘古之白
2018-02-13 00:11:25 -06:00
MuYu
1d1ea1ac59 fix switch doc error (#9338) 2018-02-12 12:10:07 +08:00
afc163
b574e8ee14 3.2.1 2018-02-12 10:17:29 +08:00
偏右
0e9743e78a Add changelog of 3.2.1 (#9335)
* Add changelog of 3.2.1

* fix version

* Add English changelog
2018-02-12 10:09:11 +08:00
Wei Zhu
4107a4bd8e docs: Remove next version link
Close #9336
2018-02-11 20:11:40 +08:00
afc163
ba236419be Fix badge API doc 2018-02-11 19:21:12 +08:00
afc163
5294a69296 site: fix home page style 2018-02-11 18:10:02 +08:00
afc163
ec399ba27f site: update link description 2018-02-11 17:59:41 +08:00
afc163
d31612f2de site: renew footer links 2018-02-11 17:54:55 +08:00
afc163
c04377e541 Add more icons, #9092 2018-02-11 17:10:18 +08:00
afc163
626ebf2063 Fix upload list update logic when beforeUpload return false
close #8020 #8779 #9248 #9191

ref #8036
2018-02-11 16:11:13 +08:00
afc163
220d28d3e4 support keyboard for Modal.confirm, close #8818 2018-02-11 13:45:32 +08:00
Juan Rodrigo Venegas Boesch
0e591ef01c Divider orientation feature (#9275)
User can align the text to the left or right with "orientation" prop, if not set it will be centered.
2018-02-11 11:51:56 +08:00
afc163
e8fa1f168b Merge branch 'master' into feature-3.3.0 2018-02-11 11:51:05 +08:00
afc163
e3f115dd3d update snapshot 2018-02-11 11:48:59 +08:00
afc163
1ae7da3878 Fix hasFeedback icon position in vertical form layout
close #9153 and #9309
2018-02-11 11:44:49 +08:00
偏右
d72a6dd7b9 Update README.md
close #9254
2018-02-11 11:07:42 +08:00
Wei Zhu
2aaef6564d docs: add inputReadOnly 2018-02-11 10:28:17 +08:00
Jesper We
4a69446be1 Implement inputReadOnly for TimePicker (#9327)
* Update package.json

* Document inputReadOnly

* Add inputReadOnly declaration.
2018-02-10 20:22:18 -06:00
afc163
f27bc6bd9d fix snapshot 2018-02-09 17:07:33 +08:00
afc163
fff5680743 fix typo 2018-02-09 16:30:14 +08:00
afc163
5accd6367a Fix submenu z-index, close #9218 2018-02-09 15:56:34 +08:00
afc163
2909e5f651 Fix sorter icon click area overflow in Table
close #8979
2018-02-09 15:50:08 +08:00
Wei Zhu
b5f88c0005 Fix table padding close #9319 2018-02-09 14:58:03 +08:00
jim
0df2efccd0 ~ -> ^ 2018-02-09 11:43:46 +08:00
诸岳
240289ed73 Remove TimePicker wrong line-height style, close #9292 (#9317) 2018-02-09 11:36:43 +08:00
jim
50863acb1b datePicker add dropdownClassName prop fix #7211 2018-02-09 11:35:13 +08:00
Yury Kozyrev
1e92ff8efd onKeyPress and onKeyDown typings (#9316)
* Update Checkbox.tsx

* Update button.tsx
2018-02-08 20:35:54 -06:00
John Johnson III
3ffe718476 fix typo in less good (#9315)
Fix `background` property value by changing it from `transprent` to `transparent`
2018-02-09 10:05:56 +08:00
Benjy Cui
44063967a1 fix: make Mention autosize height by default, close: #9068 (#9307) 2018-02-08 23:50:42 +08:00
Benjy Cui
2411bdb7b7 fix: placeholder of Mention should not be interactable, close: #9215 (#9306) 2018-02-08 22:39:43 +08:00
Marcus Bransbury
3b6cd56820 Update broken links in docs (#9310)
* update link english

* update link chinese
2018-02-08 06:58:36 -06:00
Wei Zhu
7d3ff69e12 Fix small bordered table style
Fix #8980
2018-02-08 16:14:45 +08:00
jim
7b4abe7568 doc add select component showArrow props document 2018-02-08 16:13:09 +08:00
afc163
dc7d9de4cd revert demo code 2018-02-08 15:52:24 +08:00
afc163
70f3afeda0 Fix ButtonGroup style bug when have disabled button, close #9296 2018-02-08 15:51:53 +08:00
afc163
6577616be2 fix demo 2018-02-08 14:26:33 +08:00
afc163
875024cd1e update onRow usage 2018-02-08 14:25:49 +08:00
afc163
3ed3a078e1 Document for Table onRow, ref #355 2018-02-08 14:14:46 +08:00
Leo
f8e996ee8e fix type of column dataIndex (#9298) 2018-02-07 20:26:03 -06:00
David Tsai
a8f1c35dcb Update introduce.en-US.md (#9299)
Providing clarifying language in the following areas:

* Front-end Implementation
* Who's using Ant Design
* How to Contribute

Additionally, I'd like to follow up with a short visual guide for designers to learn how to contribute to the documentation here.
2018-02-08 10:21:22 +08:00
afc163
a5f29f06a5 Fix select arrow style in IE11 2018-02-07 20:29:40 +08:00
Wei Zhu
e992682aa8 Ignore invalid end date
Fix #9267
2018-02-07 14:23:17 +08:00
afc163
33e2ef0f8d revert 1502d36 to fix #9276
ref #7934
2018-02-07 11:43:21 +08:00
Andreas Cederström
f1bd8d0d11 proper class on avatar when image doesnt exist (#9278) 2018-02-07 10:43:27 +08:00
Ubaldo Quintana
7c062bb118 Update CHANGELOG.en-US.md (#9277)
Fix typos
2018-02-06 20:37:55 -06:00
afc163
59b18b4c26 Fix card loading with empty children, close #9258 2018-02-06 11:45:22 +08:00
Wei Zhu
ca6a8d13bd site: Update Table drag demo
Close #9255
2018-02-05 11:08:16 +08:00
Wei Zhu
c725cbe791 docs: fix release title 2018-02-05 00:02:17 +08:00
Wei Zhu
978c086387 Bump 3.2.0 2018-02-04 23:27:11 +08:00
Wei Zhu
39cd160641 Add 3.2.0 changelog (#9251)
ci skip
2018-02-04 09:20:23 -06:00
Wei Zhu
18188317c1 Update snapshots 2018-02-04 22:20:39 +08:00
Wei Zhu
05de1a522f Upgrade react-slick 2018-02-04 21:08:39 +08:00
Wei Zhu
27a40679ec Upgrade rc-steps 2018-02-04 21:02:28 +08:00
Wei Zhu
c2292793bc Upgrade rc-slider 2018-02-04 21:00:23 +08:00
Wei Zhu
1735d89a66 docs: Update RangePicker[ranges] type 2018-02-04 20:35:28 +08:00
Wei Zhu
49c2a6220b Merge branch 'feature-3.2' 2018-02-04 17:24:16 +08:00
mgrdevport
b87f76e64a Change Calendar mode via property (#9243) 2018-02-04 02:50:50 -06:00
愚指导
df4097ca4d [Select] Pass Option as onChange and onSelect second argument (#9228) 2018-02-04 02:42:33 -06:00
George Gray
22c3097d79 Vars to theme Tabs (#9172) 2018-02-04 02:42:13 -06:00
Wei Zhu
70f30ef065 Trigger onOk when click on preset range (#9213)
Close #7747
2018-02-04 02:41:02 -06:00
ryanhoho
42354989e9 修复默认样式和card样式下,tabPosition=bottom时的样式错误 (#9104) (#9165) 2018-02-04 02:40:44 -06:00
YuChao Liang
75c365aa2c fix(TextArea): calculateNodeHeight (#9107) (#9108) 2018-02-04 02:18:20 -06:00
Zheeeng
24e373a812 Remove span.ant-tag-text in Tag, and remove type casting in Dropdown (#9055)
* Remove span.ant-tag-text

Warp React.ReactNode with span element is not suggested. It may cause anti-specification problem: `<span><span>I'm spec breaker</span></span>`. span is not a general tags container.
Another benefit from this change is keeping the same structure with CheckableTag.
After inspecting the removing of the style of .ant-tag-text, seems bringing no problems. The old example employeed this css class has gone long long time ago. See: 0635877a51

* Use React.Children.only api to supress type casting

By codes, the children and the overlay of Dropdown must be **single** and **valid React.ReactElement**. React.Children.only takes it and report more friendly React internal built error messages.

* Revert hack CSS styles: filling .ant-tag's block area with orphan child anchor
2018-02-04 01:29:56 -06:00
int2d
d89ffcc5b2 Update practical-projects.zh-CN.md (#9244) 2018-02-02 23:20:52 -06:00
George Gray
03c180ff08 Use @btn-primary-bg for primary ghost btn (#9236) 2018-02-02 03:23:14 -06:00
Wei Zhu
29969959f8 Revert "Add test for 3b0a704"
This reverts commit 980b2cc32b.
2018-02-02 15:36:35 +08:00
Wei Zhu
980b2cc32b Add test for 3b0a704 2018-02-02 14:50:55 +08:00
Wei Zhu
aa88c656f1 docs: remove expaned row hover background color
Close #8775
2018-02-02 14:07:57 +08:00
Wei Zhu
a9537e5934 Update snapshot 2018-02-02 12:33:39 +08:00
Wei Zhu
3b0a704df8 Only clear hoverValue when picker is open
Fix #6364
2018-02-02 12:20:26 +08:00
afc163
7a33a9e5d5 Fix extra wrapper of Card children, close #9226 2018-02-02 11:54:19 +08:00
松子
26b58a9808 feat(docs): add a new antd boilerplate. (#9225) 2018-02-02 00:13:45 +08:00
Evert Bouw
0c69d721de Fix(Typings): Add OnHeaderCell property to ColumnProps (#9223)
* Fix(Typings): Add OnHeaderCell property to ColumnProps

* onHeaderCell actually receives the ColumnProps object
2018-02-01 04:54:50 -06:00
Wei Zhu
ef55562deb Attempt to fix #8885 again, add more tests (#9164) 2018-02-01 02:12:42 -06:00
Wei Zhu
bebed2c4ae Allow function for preset range (#9195)
* Allow function for preset range

Close #8281

* Rename RangePickerRange to RangePickerPresetRange
2018-02-01 02:05:57 -06:00
afc163
8d6252cfe1 Fix missing scrollbar in chrome 2018-02-01 13:21:07 +08:00
Wei Zhu
537c79785e Remove .babelrc
Used by jest before.
2018-01-31 17:03:14 +08:00
mgrdevport
5fd741bf21 Pass name prop down to the table selection input (#9054) 2018-01-31 01:07:53 -06:00
afc163
6c46692160 Tweak confirm title style 2018-01-31 14:46:45 +08:00
Wei Zhu
842c7f21d9 Fix RangePicker input (#9009)
fix #6999
fix https://github.com/react-component/calendar/issues/286
2018-01-30 22:01:27 -06:00
afc163
9f2b4905f0 Fix AutoComplete border color in form 2018-01-31 10:47:25 +08:00
Pyroboomka
99469bd1b1 Syncing forceRender prop with rc-collapse. (#9192) 2018-01-30 20:44:33 -06:00
afc163
80a4ee7731 site: update home button style 2018-01-31 10:14:25 +08:00
Wei Zhu
3b931e97c4 Merge branch 'master' into feature-3.2 2018-01-31 10:08:23 +08:00
Wei Zhu
5c00985fed Add children to AntTreeNodeProps 2018-01-30 16:50:49 +08:00
Wei Zhu
17e26ecb71 Revert "docs: fix DatePicker start end demo"
This reverts commit b9120980fb.
2018-01-30 16:01:11 +08:00
afc163
da9d34281b site: change pro icon 2018-01-30 14:17:25 +08:00
afc163
2dfd4b2cd5 site: update pro icon 2018-01-30 12:06:14 +08:00
afc163
85c7f02ca6 Add sketch template of ant design pro 2018-01-30 11:41:04 +08:00
ryanhoho
b93e33c535 table size padding use @table-padding-vertical & @table-padding-horiz… (#9106) 2018-01-29 21:05:37 -06:00
George Gray
d19fa740c7 use highlight var on vertical menu (#9169) 2018-01-29 20:18:54 +08:00
Wei Zhu
b9120980fb docs: fix DatePicker start end demo
Close #9163
2018-01-29 19:19:36 +08:00
Wei Zhu
4a9277277b Improve coverage 2018-01-29 11:36:56 +08:00
Wei Zhu
eab8b42257 Ignore interface file 2018-01-29 11:27:53 +08:00
Wei Zhu
1c27c28ba9 Fix Turkish locale 2018-01-29 11:13:55 +08:00
Wei Zhu
f60e50a5b8 Upgrade antd-tools 2018-01-29 00:20:43 +08:00
Wei Zhu
21aefd9c06 Bump 3.1.6 2018-01-28 21:56:09 +08:00
Wei Zhu
f3b7e3df67 Add 3.1.6 Changelog 2018-01-28 21:55:20 +08:00
Wei Zhu
fa14765695 Revert "Control Calendar value, fix #8885 (#9141)"
This reverts commit 98387ad819.
2018-01-28 21:49:02 +08:00
nikogu
1329de5ebd fix home page button text overflow 2018-01-27 22:34:44 +08:00
nikogu
3ad71ea36a Merge branch 'master' into feature-3.2 2018-01-27 22:30:34 +08:00
niko
be11a6d8b1 3.1.5 changelog (#9145) 2018-01-27 21:31:57 +08:00
afc163
70569c6d28 site: improve responsive style 2018-01-27 15:17:43 +08:00
Yury Kozyrev
76c7ce669a add tabIndex to select (#9144) 2018-01-27 14:27:27 +08:00
sallen450
a9562e75fe Fix(Table): Hide emptyType in Table when loading prop is true (#9095)
* fix(Table): Hide text in  when  prop is true

* test(Table): renders empty table without emptyText when loading

* refactor: code style
2018-01-26 09:30:11 -06:00
Wei Zhu
98387ad819 Control Calendar value, fix #8885 (#9141)
If not control Calendar value, the internal value of Calendar will keep a
different date than parent component.
2018-01-26 23:14:40 +08:00
Wei Zhu
5950c09bf8 Update snapshot 2018-01-26 23:00:13 +08:00
Wei Zhu
5afb1a28b6 Merge branch 'master' into feature-3.2 2018-01-26 17:14:44 +08:00
luyiming
e511c2ac33 fix tree demo drag&drop bug (#9131) 2018-01-26 13:30:44 +08:00
Qingrong Ke
b50ca50bad docs: update head.md of Table (#9133) 2018-01-26 10:39:22 +08:00
潘晓升
e4d7e5e510 Update index.tsx (#9126)
add the “style” property for declare file
2018-01-26 10:38:28 +08:00
afc163
506f97640e Fix font family name, close ant-design/ant-design-pro#813 2018-01-26 10:24:41 +08:00
niko
f2ba99978d upgrade snapshots (#9127) 2018-01-25 18:24:59 +08:00
Wei Zhu
d47325bf51 Convert RangePicker showDate locale
Fix #8970
2018-01-25 18:00:07 +08:00
Vic
7c7125b7fa fix(notifiction): Complement duration missing type definition. (#9120) 2018-01-24 22:29:03 -06:00
George Gray
7d9a93e7ed vars to theme Menu (#9115) 2018-01-25 10:59:49 +08:00
Wei Zhu
bbe95e10e1 docs: remove -cn 2018-01-25 01:26:11 +08:00
Wei Zhu
ef9cf00ad3 docs: fix links 2018-01-25 01:16:51 +08:00
afc163
b3f31216df Fix #9103, ref #7351 2018-01-24 21:54:01 +08:00
Wei Zhu
d54dfdfac2 Update CONTRIBUTING.md 2018-01-24 21:48:41 +08:00
Wei Zhu
c29cb15594 Update CONTRIBUTING.md 2018-01-24 21:48:27 +08:00
ahalimkara
937f249b38 Kurdish translation (#9064)
* Revert "Merge branch 'master' into feature-3.2"

This reverts commit b7901e541a, reversing
changes made to 7a7933038c.

* Revert "Revert "Merge branch 'master' into feature-3.2""

This reverts commit ebf5e4c4f0.

* Kurdish translation

* Update jest snapshot for ku-iq
2018-01-24 21:40:29 +08:00
Wei Zhu
cad2b280e2 docs: Add contribution guide to website (#9075) 2018-01-24 20:59:36 +08:00
afc163
3c9c4077fa Fix missing file-word icon in demo, #9092 #9061 2018-01-24 12:21:43 +08:00
Wei Zhu
7cc05d487c Merge branch 'master' into feature-3.2 2018-01-24 10:49:53 +08:00
mgrdevport
cfdb1cab4b Pass id prop to DatePicker input field (#8598) 2018-01-24 10:48:34 +08:00
Wei Zhu
4332613633 Revert "Pass id prop to DatePicker input field (#8598)"
This reverts commit 38bf0be4ab.
2018-01-24 10:48:03 +08:00
mgrdevport
38bf0be4ab Pass id prop to DatePicker input field (#8598) 2018-01-23 20:45:46 -06:00
George Gray
72a5b1fef7 Vars to theme slider (#9065)
* vars to theme slider

* add @slider-margin back
2018-01-23 21:03:22 +08:00
afc163
2759460908 Improve avatar style 2018-01-23 21:02:50 +08:00
afc163
8c442cfaf0 Fix submenu title padding 2018-01-23 21:00:11 +08:00
Reed Sun
024e7c342f Optimize the button tip about expand/hide all code (#9086) 2018-01-23 18:56:31 +08:00
VTHINKXIE
902fa9fea2 fix(doc:grid): fix error in en doc (#9078) 2018-01-23 16:33:07 +08:00
afc163
1502d3604d Fix unexpected select disappearing in IE11, close #7934 2018-01-23 11:31:27 +08:00
Lyndon001
1f70cb9722 Update values.zh-CN.md 2018-01-23 11:18:39 +08:00
Lyndon001
63de7fc154 Update values.zh-CN.md 2018-01-23 11:17:46 +08:00
Jing Ma
dab43f4c7a Removed unnecessary section (#9067) 2018-01-22 09:18:09 -06:00
Wei Zhu
cdb160ae4b site: fix forEach call on IE 11 2018-01-22 12:11:28 +08:00
ddcat1115
b7901e541a Merge branch 'master' into feature-3.2 2018-01-21 19:56:31 +08:00
ddcat1115
2978644ccd bump 3.1.4 2018-01-21 16:20:06 +08:00
रोहन मल्होत्रा
ec16d97086 added subMenuCloseDelay & subMenuOpenDelay props to menu interface (#9049) 2018-01-21 01:13:23 +08:00
Wei Zhu
6ea33da9f8 Don't use ISO week (#9025)
https://en.wikipedia.org/wiki/ISO_week_date

fix #9021
2018-01-21 01:05:19 +08:00
Wei Zhu
a8a4152c65 Clear RangePicker hover value after panel close (#9029)
Fix #8839
2018-01-21 01:03:51 +08:00
niko
a09f531453 add grid xxl to List fixed: #9019 (#9038) 2018-01-21 01:03:00 +08:00
Minwe LUO
7a7933038c feat: Alert added iconType to support custom icon (#8811) 2018-01-21 00:59:25 +08:00
曾凯
d868c5a58e fix Input type error (#9046) 2018-01-20 19:35:14 +08:00
George Gray
aa9e335145 add vars to theme Breadcrumb component (#9022) 2018-01-20 16:04:49 +08:00
ddcat1115
4286131735 fix doc error 2018-01-20 12:46:30 +08:00
Wei Zhu
aa4a619f41 Merge branch 'master' into feature-3.2 2018-01-19 19:20:14 +08:00
Wei Zhu
0bb531aca6 Refactor DatePicker types 2018-01-19 19:07:18 +08:00
jljsj
7b90be6326 update responsive, add home footer style 2018-01-19 18:17:10 +08:00
afc163
49a53bf8df Add successPercent for progress 2018-01-19 15:22:37 +08:00
afc163
3a98fce47c Merge branch 'master' into feature-3.2 2018-01-19 15:06:09 +08:00
afc163
32023c24e5 Add aliyun icon 2018-01-19 12:04:50 +08:00
Wei Zhu
81cb1f4288 Update download.zh-CN.md 2018-01-19 10:39:57 +08:00
sallen450
e0fb5b8866 Fix: Dropdown.Button not fully disabled (#9013)
* fix(Dropdown): dropdown won't be fully disabled

* test(Dropdown): check  props pass to Dropdown
2018-01-18 09:39:34 -06:00
Wei Zhu
28c589da18 Update CHANGELOG.en-US.md 2018-01-18 22:56:05 +08:00
Wei Zhu
65a3982f3f Update CHANGELOG.zh-CN.md 2018-01-18 22:55:32 +08:00
DosLin
efa824e514 doc:fix server port (#9012) 2018-01-18 05:03:17 -06:00
afc163
1d9afb6510 Fix button group z-index, close #9014 2018-01-18 17:22:30 +08:00
afc163
200d6cb11a Fix wrong margin of tabs 2018-01-18 13:42:03 +08:00
afc163
9926c3d523 update Tabs API doc 2018-01-18 13:42:02 +08:00
George Gray
a9abe14122 Vars for checkbox and radio (#9003)
* vars for radio component

* add @checkbox-color var
2018-01-18 10:22:03 +08:00
Reed Sun
a2b6d0a23e docs: 修改 Layout 组件文档中 breakpoint width 与代码不一致的问题 (#8995) 2018-01-17 21:54:54 +08:00
超能刚哥
a760c40665 富文本编辑器增加braft-editor (#8994)
富文本编辑器增加braft-editor
2018-01-17 21:19:57 +08:00
afc163
f95cb04585 Add demo for row-click selection 2018-01-15 17:24:40 +08:00
Wei Zhu
a7b939db43 Set moment.locale to en if no locale code provide 2018-01-15 14:59:09 +08:00
Wei Zhu
96c312f8fb Revert "docs: Fix LocelProvider demo"
This reverts commit 6f9c8da502.
2018-01-15 14:59:09 +08:00
Eli White
d9062bdb5c Fixing typo on homepage (#8962) 2018-01-13 23:55:43 -06:00
afc163
7aa665cc14 Add hasSider to avoid flickering in ssr
close #8937
2018-01-12 20:44:35 +08:00
afc163
9cbe6ca6b3 Merge branch 'master' into feature-3.2 2018-01-12 20:35:24 +08:00
lixiaoyang1992
9c52014585 为Tabs增加gutter 2018-01-08 19:27:43 +08:00
358 changed files with 18690 additions and 4746 deletions

View File

@@ -1,10 +0,0 @@
{
"env": {
"test": {
"presets": ["es2015", "react", "stage-0"],
"plugins": [
"add-module-exports"
]
}
}
}

View File

@@ -61,8 +61,10 @@ if (process.env.RUN_ENV === 'DEMO') {
'no-console': 0,
'no-plusplus': 0,
'eol-last': 0,
'no-script-url': 0,
'prefer-rest-params': 0,
'react/no-multi-comp': 0,
'react/prefer-stateless-function': 0,
'jsx-a11y/href-no-hash': 0,
'import/newline-after-import': 0,
});

View File

@@ -1,66 +1,13 @@
# Contributing to Ant Design
[中文版](./CONTRIBUTING.zh-CN.md)
Want to contribute to Ant Design? There are a few things you need to know.
The following is a set of guidelines for contributing to Ant Design. Please spend several minutes in reading these guidelines before you create an issue or pull request.
We wrote a **[contribution guide](https://ant.design/docs/react/contributing)** to help you get started.
## Code of Conduct
---
We have adopted a [Code of Conduct](../CODE_OF_CONDUCT.md) that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be tolerated.
# 参与共建
## Open Development
想要给 Ant Design 贡献自己的一份力量?
All work on Ant Design happens directly on [GitHub](https://github.com/ant-design). Both core team members and external contributors send pull requests which go through the same review process.
## Branch Organization
According to our [release schedule](../CHANGELOG.md#release-schedule), we'll cut a `feature` branch (e.g. `feature-3.1` for 3.1 release) from `master` every month. If you send a bugfix pull request, please do it against the `master` branch, if it's a feature pull request, please do it against the `feature` branch.
## Bugs
We are using [GitHub Issues](https://github.com/ant-design/ant-design/issues) for bug tracing. The best way to get your bug fixed is using our [issue helper](http://new-issue.ant.design) and provide a reprduction with this [template](https://u.ant.design/codesandbox-repro).
Before you reporting a bug, please make sure you've searched exists issues, and read our [FAQ](https://github.com/ant-design/ant-design/wiki/FAQ).
## Proposing a Change
If you intend to change the public API or introduce new feature, we also recommend use our [issue helper](http://new-issue.ant.design) to create a feature request issue.
## Your First Pull Request
Working on your first Pull Request? You can learn how from this free video series:
[How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)
To help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/ant-design/ant-design/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) that contain bugs or small features that have a relatively limited scope. This is a great place to get started.
If you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you intend to work on it so other people dont accidentally duplicate your effort.
If somebody claims an issue but doesnt follow up for more than two weeks, its fine to take over it but you should still leave a comment.
## Sending a Pull Request
The core team is monitoring for pull requests. We will review your pull request and either merge it, request changes to it, or close it with an explanation.
**Before submitting a pull request**, please make sure the following is done:
1. Fork the repository and create your branch from [proper branch](./CONTRIBUTING.md#branch-organization).
1. Run `npm install` in the repository root.
1. If youve fixed a bug or added code that should be tested, add tests!
1. Ensure the test suite passes (npm run test). Tip: `npm test -- --watch TestName` is helpful in development.
1. Run `npm test -- -u` to update [jest snapshot](http://facebook.github.io/jest/docs/en/snapshot-testing.html#snapshot-testing-with-jest) and commit these changes as well (if has).
1. Make sure your code lints (npm run lint). Tip: Lint runs automatically when you `git commit`.
Sending a Pull Request to [react-component](https://github.com/react-component/):
Since antd's components are based on react-component, sometimes you may need to send pull request to the corresponding react-component repository. If it's a bugfix pull request, after it's merged, the core team will release a patch release for that component as soon as possible, then you only need to do is reinstalling antd in your project to get the latest patch release. If it's a feature pull request, after it's merged, the core team will release a minor release, then you need raise another pull request to [Ant Design](https://github.com/ant-design/ant-design/) to update dependencies, document and TypeScript interfaces (if needed).
## Development Workflow
After cloning antd, run `npm install` to fetch its dependencies. Then, you can run several commands:
1. `npm start` runs Ant Design website locally.
1. `npm run lint` checks the code style.
1. `npm test` runs the complete test suite.
1. `npm run compile` compiles TypeScript code to the `lib` and `es` directory.
1. `npm run dist` creates UMD build of antd.
我们写了一份 **[贡献指南](https://ant.design/docs/react/contributing-cn)** 来帮助你开始。

View File

@@ -37,6 +37,7 @@ module.exports = {
'!components/style/index.tsx',
'!components/*/locale/index.tsx',
'!components/*/__tests__/**/type.tsx',
'!components/**/*/interface.{ts,tsx}',
],
transformIgnorePatterns,
snapshotSerializers: [

View File

@@ -19,7 +19,6 @@ matrix:
- env: REACT=15 TEST_TYPE=test:es
- env: REACT=15 TEST_TYPE=test:dom
- env: REACT=15 TEST_TYPE=test:node
- env: REACT=16 TEST_TYPE=bisheng:build
before_script:
- scripts/install-react.sh

View File

@@ -1,18 +1,26 @@
778758944 <778758944@qq.com>
Aaron Planell López <aaronplanell@gmail.com>
Adrian Dimitrov <dimitrov.adrian@gmail.com>
Albert Zheng <lisong.zheng@gmail.com>
Albert 理斯特 <shuaizhexu@gmail.com>
Aleck Landgraf <aleck.landgraf@gmail.com>
Alexander <labriko@yandex.ru>
Alexander Suevalov <suevalov.work@gmail.com>
Alexandre Kirszenberg <a.kirszenberg@gmail.com>
Amorites <751809522@qq.com>
Anas Tawfeek <anas.tawfeek@outlook.com>
Andrew Murray <radarhere@gmail.com>
Andrey G <plandem@gmail.com>
Arnab Sen <arnabsen@gmail.com>
Arthur Denner Oliveira Santos <arthurdenner7@gmail.com>
Arvin Xu <arvinx@foxmail.com>
BK Heleth <bon.hoo@hotmail.com>
Babajide Fowotade <jide.b.tade@gmail.com>
Bartek <bartek.kozera@gmail.com>
Benjamin Kniffler <bkniffler@me.com>
Benjy Cui <benjytrys@gmail.com>
Bernie <bernie.wangbj@gmail.com>
Bilal Sirazitdinov <bilalsir@yandex.ru>
Bill Sheikh <bilawals22@gmail.com>
Bo Chen <bochen2014@yahoo.com>
Bozhao <yubz86@gmail.com>
@@ -20,113 +28,187 @@ Brett Lamy <bel423@me.com>
Brook Shi <iwxiaot@gmail.com>
Bruce Mitchener <bruce.mitchener@gmail.com>
Bruno Maia <bruno.mm.maia@gmail.com>
Bryan Berger <bb@ga.co>
C <4019980@qq.com>
Cam Song <neosoyn@gmail.com>
Camol <kwwnjujlc@sina.com>
Canwen Xu <canwenxu@126.com>
Catalin Miron <mironcatalin@gmail.com>
Cee Cirno <i@cee.moe>
Chang Wang <cheapsteak@gmail.com>
Chikara Chan <chenhongtu@51xianqu.net>
Chris Kelly <cjke.7777@gmail.com>
ChrisFan <chris.fan.dev@gmail.com>
Christopher Deutsch <cd@cdeutsch.com>
Chuang Yu <cyu9960@gmail.com>
Claudio Restifo <claudio.restifo@gmail.com>
Cody Chan <int64ago@gmail.com>
Colton Pierson <colton@coltonpierson.com>
Confiks <confiks@scriptbase.org>
Conway Anderson <hello@conwayanderson.com>
Cordaro <elvis07@163.com>
D & R <jdz321@qq.com>
Damian Green <damian.green@microlease.com>
Dan Minshew <ofenixculpa@gmail.com>
Dane David <dndavid102@gmail.com>
Danny Hoower Antonio Viasus Avila <danjavia@gmail.com>
Daqi Song <dqaria@gmail.com>
Darren Poon <dyhpoon@gmail.com>
David Schneider <davschne@gmail.com>
DengYun <tdzl2003@gmail.com>
Dimitri Mitropoulos <dimitrimitropoulos@gmail.com>
Dmitry Bolotin <bolotin.dmitriy@gmail.com>
Dorian <dorian@doma.io>
DosLin <doslino@gmail.com>
EcmaProSrc.P/ka <asoiso@foxmail.com>
Edd Hannay <accounts@edd.fm>
Eddie Xie <oeddyo@gmail.com>
Eden Wang <Eden.Wang@Akmii.com>
Eden Wang <yociduo@vip.qq.com>
Egor Yurtaev <yurtaev.egor@gmail.com>
Eli White <github@eli-white.com>
Emma <sima.zhang1990@gmail.com>
Eric <84263800@qq.com>
Erwann Mest <m+github@kud.io>
Evgeny Kuznetsov <jackk@ya.ru>
Eward Song <eward.song@gmail.com>
Flynn <li.fulin@foxmail.com>
For177 <mengqiang.q@gmail.com>
Geoff Holden <geoff@brightloudnoise.com>
George Gray <george@ummodesign.com>
Graeme Yeates <gyeates@clearpath.ai>
Graeme Yeates <yeatesgraeme@gmail.com>
Gray Choi <gray.choi.1988@gmail.com>
Guan Hao <raptium@gmail.com>
Guan Yu Pan (Jacky) <jackypan1989@gmail.com>
HJin.me <hjin.me@gmail.com>
Hai Phan Nguyen <pnghai@gmail.com>
Haibin Yu <haibin.yu@oceanwing.com>
Hanai <ihanai1991@gmail.com>
Haroen Viaene <fingebimus@me.com>
Harshit Mehrotra <harshitmehrotra@hotmail.com>
Henri Normak <henri.normak@gmail.com>
Hubert Argasinski <argasinski.hubert@gmail.com>
Hughen <446370503@163.com>
Hugo LEHMANN <shogi31@gmail.com>
Igor G <i.gaidai4uk@gmail.com>
ImJoeHs <865439601@qq.com>
Inclined.Z <zjq0717@163.com>
Infinity <305870677@qq.com>
Ivan Kravets <me@ikravets.com>
Ivo Stratev <ivo.stratev.tues@gmail.com>
JaePil Jung <jjp5023@gmail.com>
James <james@schoolshape.com>
Jeffrey Carl Faden <jeffreyatw@gmail.com>
Jerry Bendy <jerry@icewingcc.com>
Jesper We <jesper@journeyman.se>
Jiabin Peng <png.inside@gmail.com>
Jialei <jialeicui@126.com>
Jieraaa <842533841@qq.com>
Jing Ma <mjingm87@qq.com>
Joe <qiaolibo@126.com>
Joe Hsu <jhsu.x1@gmail.com>
John Johnson III <john@johnjohnson.cc>
John Nguyen <jtnguyen236@gmail.com>
Jonatas Walker <jonataswalker@gmail.com>
Jonny Buchanan <jonathan.buchanan@gmail.com>
Jordan Hornblow <jordan@jch254.com>
Josué <ujosuegt@outlook.com>
Juan Rodrigo Venegas Boesch <jrvboesch@gmail.com>
Junyu Zhan <irrigator@yeah.net>
Kaien Liao <liaokaien@gmail.com>
Kenaniah Cerny <kenaniah@gmail.com>
Kenneth Truong <kenneth.e.truong@gmail.com>
Kevin Ivan <info@kevinivan.com>
KgTong <kgtong1992@gmail.com>
Khalifa Lame <khalibloo@gmail.com>
Kiho · Cham <monkindey@163.com>
Kimmo Saari <kimmo.saari@revolt.fi>
Kirill Stiopin <kirill.stiopin@hotmail.com>
Knacktus <knacktus@gmail.com>
Kyle Kelley <rgbkrk@gmail.com>
Kyle Rosenberg <kyle.rosenberg@gmail.com>
Larry Laski <larry.laski@gmail.com>
LeeHarlan <709886167@qq.com>
LeezQ <lizhenq2009@gmail.com>
Leo <clinyong@gmail.com>
Leon Shi <superRaytin@163.com>
Leon Shi <superRaytin@gmail.com>
Liu Yang <zation1@gmail.com>
LongYinan <lynweklm@gmail.com>
Lyndon001 <lld207@126.com>
MG12 <wuzhao.mail@gmail.com>
Ma Tianxiao <matx2215@outlook.com>
Madis Väin <madisvain@gmail.com>
Manjit Kumar <manjit1727@gmail.com>
Manweill <mic.liangwenwei@foxmail.com>
Marco Afonso <mafonso333@gmail.com>
Marcus Bransbury <marcus.bransbury@gmail.com>
Marius Ileana <visvadw@gmail.com>
Mars Wong <marswong618@gmail.com>
Marshall Chen <Juniors.fei@gmail.com>
Martin Litvaj <kamahl19@gmail.com>
Martin Novák <martinnovak@outlook.com>
Mathew <khayaanimations@gmail.com>
Maximilian Meyer <Maximilian.Meyer@br.de>
Meck <yesmeck@gmail.com>
MeiLin <postget.me@gmail.com>
Meow-z <372086270@qq.com>
Miaow <i@zfeng.net>
Michalis Macheras <diodosier@gmail.com>
Min <dicklwm@163.com>
MinJeong Kim <min7859@gmail.com>
Minqi Pan <pmq2001@gmail.com>
Minsung Ryu <ryums0227@gmail.com>
Mitchell Demler <mitchell.demler@harcourts.net>
Mohamed Seada <mohamed.seada.1994@gmail.com>
Mr.Tone <vector@malubei.com>
MuYu <mr.muzea@gmail.com>
Mário Gonçalves <mario.mc.goncalves@gmail.com>
Nathan Griffin <nathan@gatherhere.com>
Nathan Tavares Nascimento <nathan.tnascimento@gmail.com>
Nathan Wells <nwwells@gmail.com>
Neekey <ni184775761@gmail.com>
Nekron <nekron.hyt@gmail.com>
Neverland <chenjiahan@buaa.edu.cn>
Nico <nicolas@freddelacompta.com>
Nidhi Agarwal <nidhi.agarwal@zomato.com>
Nimo <nimo.jser@gmail.com>
Nishant Arora <na.nishantarora@gmail.com>
Nokecy <Nokecy@163.com>
OAwan <georgio.wan@gmail.com>
Oleksandr Kovalchuk <me.olexandr.kovalchuk@gmail.com>
OuYancey <ou.yancey@gmail.com>
Panjie Setiawan Wicaksono <panjie@panjiesw.com>
Patrick Gidich <patrick.gidich@simnova.com>
Patryk <longer44@gmail.com>
Peter <usstpeter@gmail.com>
Peter Berg <atticusberg@gmail.com>
Pierre <pierre@bazoge.com>
Pierre Neter <pierreneter@gmail.com>
Piper Chester <piperchester@gmail.com>
Pixy Yuan <pixy.bupt@gmail.com>
Pyiner <lijiuyang1992@gmail.com>
Pyroboomka <qwaarty@mail.ru>
Qiaosen Huang <joesonw@gmail.com>
Qingrong Ke <keqingrong1992@gmail.com>
Rafael Cosman <rafaelcosman@alumni.stanford.edu>
Ramsés Moreno <ramses@cuatromedios.com>
Randy <randypriv@gmail.com>
RaoHai <surgesoft@gmail.com>
Reed Sun <superreedsun@gmail.com>
Rex <zhangzilong.zzl@163.com>
Ricardo Raphael Joson <rrjoson08@gmail.com>
Richard D. Worth <rdworth@gmail.com>
Robert Wilkinson <wilkinson.robert.a@gmail.com>
Rohan Malhotra <rohan.root@gmail.com>
Rrrandom <emanonhere@gmail.com>
SHEN Lin <shenlin192@gmail.com>
Sakol Assawasagool <koobitor@gmail.com>
Sam Chen <chenxsan@gmail.com>
Sam Maxwell <sam@paybase.io>
Sangle <whb97@163.com>
Sanjay Kumar <kris.gooner@gmail.com>
Sanjay Kumar <sk@tectusdreamlab.com>
Sean Lin <sean@ejoy.com>
Sean Sun <pinggodstudio@gmail.com>
@@ -134,39 +216,74 @@ Sebastian Blade <blade254353074@hotmail.com>
Sergio Crisostomo <sergiosbox@gmail.com>
Shawn Sit <xueqingxiao@gmail.com>
ShiTengFei <shitengfei@goyoo.com>
Shubham Kanodia <shubhamsizzles@gmail.com>
SimaQ <sima.zhang1990@gmail.com>
Spencer <spjy@hawaii.edu>
Stephen Esser <Stephen.Esser@gmail.com>
Tao <magicdawn@qq.com>
Tao Zhang <windse7en@gmail.com>
Taylor Sabell <taylorsabell@gmail.com>
Tengjiao Cai <caitengjiao1987@gmail.com>
Terence <trence320@163.com>
The Rock <zhoguoxin@126.com>
Tino D <ginodeis@gmail.com>
Tom Gao <tom@zoomsoft.cc>
Trotyl Yu <trotyl@qq.com>
Troy Thompson <troynt@gmail.com>
Tyler <chaotyler@gmail.com>
Ubaldo Quintana <blkdr@hotmail.com>
Vadim Macagon <vadim.macagon@gmail.com>
Valentin Vichnal <valentin@vichnal.com>
Vemund Santi <veund@santi.no>
Vemund Santi <vemund@santi.no>
Vic <709147950@qq.com>
Vincent Zhang <vxzhong@qq.com>
ViviaRui <zr1450995198@163.com>
Walter Barbagallo <turbometalskater@gmail.com>
Wang Jun <amos.callmexyz@gmail.com>
Warren Seymour <warren@fountainhead.tech>
Wei Zhu <yesmeck@gmail.com>
Wenchao Hu <zjuhwc@gmail.com>
Will Chen <willchen90@gmail.com>
WingGao <wing.gao@live.com>
Wu Haotian <whtsky@gmail.com>
XBTop1! <xbtop1@gmail.com>
Xie Guanglei <xieguanglei@hotmail.com>
XuMM_12 <owiatsq@sina.cn>
Yang Bin <yangkghjh@gmail.com>
Yasin Uslu <nepjua@gmail.com>
Yiming <ymjrcc@qq.com>
Yogesh <yogeshkumar180592@gmail.com>
YuChao Liang <l.yuch@foxmail.com>
Yunus EŞ <yunus@yunuses.com>
Yury Kozyrev <urakozz@me.com>
Yusuke Ito <novi.mad@gmail.com>
Yuwei Ba <i@xiaoba.me>
YuyingWu <wuyuying1128@gmail.com>
Zack Craig <zack@zack6849.com>
Zap <a124116186@qq.com>
Zhang Zhi <fytriht@gmail.com>
Zheeeng <hi@zheeeng.me>
Ziluo <gyfzzu@gmail.com>
afc163 <afc163@gmail.com>
ahalimkara <ahalimkara@gmail.com>
ascoders <576625322@qq.com>
ashishg-qburst <ashishg@qburst.com>
bang <sqibang@gmail.com>
bang88 <sqibang@gmail.com>
blankzust <450811238@qq.com>
byuanama <byuan@ama.com.au>
bzone <yarnbcoder@gmail.com>
caoyi <caoyi0905@mail.hfut.edu.cn>
cathayandy <wzm_andy@126.com>
chaofeis <408067385@qq.com>
chchen <cc272309126@gmail.com>
chencheng (云谦) <sorrycc@gmail.com>
chencheng <sorrycc@gmail.com>
cjahv <cjahv@qq.com>
clinyong <clinyong@gmail.com>
corneyl <cornieljoosse@gmail.com>
ddcat1115 <ddcat1115@gmail.com>
delesseps <andrewlessels@gmail.com>
denzw <denzw@21cn.com>
detailyang <detailyang@gmail.com>
devqin <devqin@gmail.com>
@@ -181,40 +298,67 @@ feng zhi hao <fzhihao@outlook.com>
fengmk2 <m@fengmk2.com>
flashback313 <windmark2012@gmail.com>
genie <genie88@163.com>
gregahren <grega.hren@gmail.com>
handycode <lihandi@gmail.com>
hansnow <hansnow2012@gmail.com>
haoxin <coderhaoxin@outlook.com>
hardfist <yangjianzju@gmail.com>
hauwa123 <hauwa.aminu@outlook.com>
henryv0 <henryvo94@gmail.com>
hi-caicai <hi@cai-cai.me>
huzzbuzz <huzzbuzz@outlook.com>
iamcastelli <sowed@cyberdude.com>
imosapatryk <imosa.patryk@gmail.com>
infeng <fzhihao@outlook.com>
int2d <int2d@qq.com>
ioldfish <fish.wangl@gmail.com>
jasonslyvia <jasonslyvia@gmail.com>
jasonxia23 <xia.jason23@gmail.com>
jiang <155259966@qq.com>
jim <wasd2144@hotmail.com>
jinouwuque <ee2win@gmail.com>
junjing.zhang <zhangjunjing@gmail.com>
kacjay <45483388@qq.com>
kagawagao <kingsongao1221@gmail.com>
kaifei <150641329@qq.com>
kasinooya <kasinooya@gmail.com>
kayw <kayw@outlook.com>
kdenz <ksnz93@gmail.com>
kdepp <kdepp.cd@gmail.com>
keng <keng@renderinghouse.com>
keqingrong <keqingrong1992@gmail.com>
ko <git@yaksok.net>
konakona <lovekonakona@gmail.com>
kossel <lis.yichao@gmail.com>
kuang <p2227@hotmail.com>
kun sam <kunsam624@icloud.com>
leadream <857098475@qq.com>
lehug <zcszuo5811@126.com>
leon.shi <superRaytin@163.com>
lgmcolin <gengmin.lgm@gmail.com>
lgmcolin <lgmcolin@gmail.com>
liangfei <njliangfei@gmail.com>
liekkas <zjq0717@163.com>
lihqi <455711093@qq.com>
lixiaochou077 <qi.liqi07@gmail.com>
lixiaoyang <lixiaoyang2345@gmail.com>
lixiaoyang1992 <lixiaoyang2345@gmail.com>
lizhaocai <lzc09008@gmail.com>
lizhen <lizhen@youzan.com>
loganpowell <loganp@tepper.cmu.edu>
luyiming <luyimingchn@gmail.com>
lvren <luren6049@qq.com>
mArker <252133226@qq.com>
memoryza <jincai.wang@foxmail.com>
mgrdevport <mgrdevport@gmail.com>
mitchell.demler <mitchell.demler@harcourts.net>
mkermani144 <mkermani144@gmail.com>
monkindey <monkindey@163.com>
muzuiget <muzuiget@gmail.com>
natergj <nater_nater@me.com>
neekey <ni184775761@gmail.com>
niko <644506165@qq.com>
nikogu <644506165@qq.com>
paranoidjk <hust2012jiangkai@gmail.com>
parlop <parlop@gmail.com>
pd4d10 <pd4d10@gmail.com>
@@ -224,8 +368,11 @@ pizn <pizner@gmail.com>
plandem <plandem@gmail.com>
popomore <sakura9515@gmail.com>
qubaoming <qubaoming@didichuxing.com>
ravirambles <ravirambles@gmail.com>
ryangun <ryangun@foxmail.com>
ryanhoho <hswacoal@gmail.com>
sadmark <zhoubin@laidian360.com>
sallen450 <jqh101@sina.com>
shelwin <wxfans@gmail.com>
shenlin192@gmail.com <shenlin192@gmail.com>
shlice <licesh@gmail.com>
@@ -236,17 +383,26 @@ snadn <snadn@snadn.cn>
sojournerc <cmeyer@zvelo.com>
sorrycc <sorrycc@gmail.com>
swindme <swindme@163.com>
syssam <s.y.s.sam.sys@gmail.com>
thegatheringstorm <tgs@tgs.blue>
tianli.zhao <275287902@qq.com>
tom <caolvchong@gmail.com>
twobin <twobin@live.com>
u3u <qwq@qwq.cat>
ustccjw <317713370@qq.com>
valleykid <valleykiddy@gmail.com>
vgeyi <vgeyiz@126.com>
wangtao0101 <yuecjn@gmail.com>
wangxiaolei <fatelei@gmail.com>
warmhug <hualei5280@gmail.com>
whtang906 <whtang906@gmail.com>
wizawu <wizawu@gmail.com>
wonyun <wy393767068@163.com>
xiaofan2406 <xiaofan2406@gmail.com>
yangwukang <yangwukang@boco.com.cn>
yeliex <yeliex@yeliex.com>
yiminghe <yiminghe@gmail.com>
yociduo <yociduo@vip.qq.com>
yubozhao <yubz86@gmail.com>
yuche <i@yuche.me>
z <haig8@msn.com>
@@ -255,26 +411,46 @@ zerob4wl <zerob4wl@gmail.com>
zhangpc <zhangpc@tenxcloud.com>
zhaocai <lzc09008@gmail.com>
zhujun24 <zhujun87654321@gmail.com>
zhuyue <fuping.dfp@antfin.com>
zilong <jzlxiaohei@163.com>
zinkey <yaya@uloveit.com.cn>
zollero <corona7@163.com>
zombiej <smith3816@gmail.com>
zuiidea <zuiiidea@gmail.com>
一喵呜 <hyb628@gmail.com>
乔奕轩 <qiao_yixuan@163.com>
低位 <zhujun87654321@gmail.com>
偏右 <afc163@gmail.com>
可乐 <zaxlct@foxmail.com>
吕立青 <jimmy.jinglv@gmail.com>
广彬-梁 <326741518@qq.com>
柚子男 <yozman@sina.com>
白羊座小葛 <abeyuhang@gmail.com>
英布 <chaoren1641@gmail.com>
蔡伦 <sliuqin@gmail.com>
逸达 <dqaria@gmail.com>
邦 <sqibang@gmail.com>
闲耘™ <hotoo.cn@gmail.com>
爱but的苍蝇 <354788473@qq.com>
拷钉 <41830859@qq.com>
竹尔 <Juelchiang@gmail.com>
偏右 <afc163@gmail.com>
英布 <chaoren1641@gmail.com>
朮厃 <cn.ah.liu@gmail.com>
诸岳 <dengfuping_develop@163.com>
逸达 <dqaria@gmail.com>
蔡伦 <sliuqin@gmail.com>
陆离 <surgesoft@gmail.com>
愚道 <tingzhao.ytz@antfin.com>
陈帅 <wasd2144@hotmail.com>
马斯特 <sd4399340@126.com>
马金花儿 <o.o@mug.dog>
松子 <window.pibarr@gmail.com>
可乐 <zaxlct@foxmail.com>
山客 <zeakhold@gmail.com>
曾凯 <zengkai2009@foxmail.com>
低位 <zhujun87654321@gmail.com>
广彬-梁 <326741518@qq.com>
徐坤龙 <272992168@qq.com>
黄子毅 <576625322@qq.com>
翁润雨 <593110501@qq.com>
崔宏森 <948346354@qq.com>
闲耘™ <hotoo.cn@gmail.com>
一喵呜 <hyb628@gmail.com>
吕立青 <jimmy.jinglv@gmail.com>
隋鑫磊 <joshuasui@gmail.com>
乔奕轩 <qiao_yixuan@163.com>
马斯特 <sd4399340@126.com>
王集鹄 <wjhu111@21cn.com>
柚子男 <yozman@sina.com>
愚指导 <yutingzhao1991@sina.com>
愚指导-TZ <yutingzhao1991@sina.com>
超能刚哥 <margox@foxmail.com>
马金花儿 <o.o@mug.dog>
रोहन मल्होत्रा <rohan.malhotra@adwyze.com>
白羊座小葛 <abeyuhang@gmail.com>

View File

@@ -15,9 +15,249 @@ timeline: true
---
## 3.4.4
`2018-04-28`
- 🐞 Fix that Upload file in`onChange({ file })` is not a File instance introduced in `3.4.2`. [#10293](https://github.com/ant-design/ant-design/issues/10293)
- 🐞 Fix style lose bug when use tree shaking in webpack@4. [#10217](https://github.com/ant-design/ant-design/pull/10217) [@whtsky](https://github.com/whtsky)
## 3.4.3
`2018-04-23`
- 🐞 Fix style lose bug when use tree shaking in webpack@4. [#10197](https://github.com/ant-design/ant-design/pull/10197) [@Aladdin-ADD](https://github.com/Aladdin-ADD)
- 🐞 Fix `Menu` item's clickable region in dark theme. [#10187](https://github.com/ant-design/ant-design/pull/10187) [@dgeibi ](https://github.com/dgeibi )
## 3.4.2
`2018-04-22`
- 💄 Deployed site by [netlify](http://netlify.com/) to avoid blocking by GFW.
- 🐞 Fix TypeScript definitions of Menu, Tooltip, Card, Anchor, Avatar, Form, Tabs, Transfer, Tree, AutoComplete and etc.
- 💄 Added `sideEffects` to `package.json` for better Tree-Shaking. [#10043](https://github.com/ant-design/ant-design/pull/10043) [@Aladdin-ADD](https://github.com/Aladdin-ADD)
- List
- 🐞 Fix extra border. [#10028](https://github.com/ant-design/ant-design/issues/10028)
- 🐞 Fix extra prop warning of `locale`. [#10128](https://github.com/ant-design/ant-design/pull/10128) [@slonoed](https://github.com/slonoed)
- 🐞 Fix wrong preview image of Upload list when file.url contains url params. [#10102](https://github.com/ant-design/ant-design/issues/10102)
- 🐞 Fix Progress when percent is out of range. [0eb8357](https://github.com/ant-design/ant-design/commit/0eb835772dbaa7ed14babe03fc177821c5bd5ca5)
- Menu
- 🐞 Fix arrow style of disabled SubMenu. [#10113](https://github.com/ant-design/ant-design/issues/10113)
- 🐞 Fix that menu width is wrong when `collapsedWidth` is assigned as px string like `40px`. [#10140](https://github.com/ant-design/ant-design/issues/10140)
- 🐞 Fix that sometimes controlled input in Form cannot be edited. [#9790](https://github.com/ant-design/ant-design/issues/9790)
- 🐞 Fix padding jumping issue of loading Card. [#10052](https://github.com/ant-design/ant-design/pull/10052) [@zheeeng](https://github.com/zheeeng)
- 🐞 Fix that Avatar's fallback text don't scale as the text avatar does. [#10184](https://github.com/ant-design/ant-design/pull/10184)
- 🐞 Fix Table `getCheckboxProps` cannot be updated as expected. [#10133](https://github.com/ant-design/ant-design/issues/10133)
- 🐞 Fix CheckboxGroup `prefixCls` prop not passed to Checkbox. [#9950](https://github.com/ant-design/ant-design/issues/9950)
## 3.4.1
`2018-04-08`
- 🐞 Fix TypeScript type error caused by code error of Badge. [#9931](https://github.com/ant-design/ant-design/issues/9931)
- 💄 Improve clicking region of Card `actions`. [#9882](https://github.com/ant-design/ant-design/issues/9882)
- 🐞 Fix Divider style issue when used with float elements. [#9956](https://github.com/ant-design/ant-design/issues/9956)
- 🐞 Fix style issue of Form in advanced-search mode. [#9907](https://github.com/ant-design/ant-design/issues/9907)
- 🐞 Add `onHeaderRow` TypeScript type definitions for Table. [#9902](https://github.com/ant-design/ant-design/pull/9902) [@Nokecy](https://github.com/Nokecy)
- 💄 Improve the customized-icon demo of Tree. [#9893](https://github.com/ant-design/ant-design/pull/9893)
- 🐞 Fix image url display with non-image extention in Upload. [#9936](https://github.com/ant-design/ant-design/pull/9936)
## 3.4.0
`2018-04-01`
- Tree
- 🛠 In this version, we refactored the underlying code of Tree to resolve some long living issues.
- 🌟 Added `defaultExpandParent` for expanding parent at first render.
- 🌟 Added `disabled` for disabling the whole tree.
- 🌟 Added `TreeNode[icon]` to allow setting custom node icon.
- 🌟 Improved the check logic for disabled TreeNode.
- 🌟 Anchor added `getContainer` for setting the container of scroll content.
- 🌟 Table added a new less variable `@table-expanded-row-bg`. [#9789](https://github.com/ant-design/ant-design/pull/9789)
- 🐞 Fixed a less syntax error. [#9832](https://github.com/ant-design/ant-design/pull/9832) [@jojoLockLock](https://github.com/jojoLockLock)
- 🐞 Fixed `moment.locale` invoking error in LocaleProvider. [#9853](https://github.com/ant-design/ant-design/pull/9853)
- 🐞 Fixed issue resulting in `style` of WeekPicker not works. [#9848](https://github.com/ant-design/ant-design/issues/9848)
- 🐞 Fixed type definition of Layout.Sider. [#9885](https://github.com/ant-design/ant-design/pull/9885) [@zachguo](https://github.com/zachguo)
- 💄 Improved style of Modal for long contents. [#9592](https://github.com/ant-design/ant-design/pull/9592)
- 🌟 Added new locale Slovenian.
## 3.3.3
`2018-03-25`
- Revert Upload `file` type change in previous version which causes breaking change.
## 3.3.2
`2018-03-24`
- 🐞 `Carousel`: Upgrade `react-slick` version to fix width calculation. [#3659](https://github.com/ant-design/ant-design/issues/3659)
- 💄 `Rate`: Adjust `disabled` style. [#9747](https://github.com/ant-design/ant-design/issues/9747)
- 💄 `Modal`: Adjust `confirm-modal` style to fix display issue when content use grid layout. [#9374](https://github.com/ant-design/ant-design/issues/9374)
- 💄 `Menu`: Adjust style to fix mouse trigger event region. [#9666](https://github.com/ant-design/ant-design/pull/9666) [@dgeibi](https://github.com/dgeibi)
- 🐞 `Upload`: Fix type of `file` on `beforeUpload` function. [#9775](https://github.com/ant-design/ant-design/issues/9775)
- 🐞 `Button`: Fix `two-chinese-words` space not re-calculate when text changed. [4502ad8](https://github.com/ant-design/ant-design/commit/4502ad8376e536c450fa4f27d2a5855be5a153e7)
## 3.3.1
`2018-03-18`
- 💄 Tweak danger button focus style.
- 🐞 Fix a show error when the value of enterButton is a button element. [#9639](https://github.com/ant-design/ant-design/issues/9639)
- 🐞 Fix missing key of `column.title` in Table .[#9658](https://github.com/ant-design/ant-design/issues/9658) [@terence55](https://github.com/terence55)
- 🐞 Fix `scroll: { x: true }` not working if `.ant-table-scroll table` width is `auto`. [#9704](https://github.com/ant-design/ant-design/pull/9704)
- 🐞 Fix when the helper message disappears, the input box will shake. [#8831](https://github.com/ant-design/ant-design/issues/8831)
- 🐞 Fix isMoment call in `TimePicker` will report error in parcel. [85c78e4](https://github.com/ant-design/ant-design/commit/85c78e49a91737c2841dc42621db21ca248b62b4)
- 🐞 Tweak `Table` border radius. [#9674](https://github.com/ant-design/ant-design/pull/9674)
## 3.3.0
`2018-03-12`
- 🌟 Add `afterClose` prop for `Alert` to achieve smooth unmount. [#9448](https://github.com/ant-design/ant-design/pull/9448) [@Hughen](https://github.com/Hughen)
- 🌟 Add `validRange` prop for `Calendar` to set the date range. [71f65a0](https://github.com/ant-design/ant-design/commit/71f65a0be8e72a67f334c57e79ae3ff5fb640630) [@Rohanhacker](https://github.com/Rohanhacker)
- 🌟 Add `defaultActiveTabKey` prop for `Card` to initial TabPane's active key. [30fe88d](https://github.com/ant-design/ant-design/commit/30fe88d4bdcec765bf92ca32a755d9646b36978e) [@u3u](https://github.com/u3u)
- `DatePicker`
- 🌟 Add `dropdownClassName` prop to set the className of popup calendar. [#7211](https://github.com/ant-design/ant-design/issues/7211)
- 🐞 Fix the error of resolving `moment` object. [#9539](https://github.com/ant-design/ant-design/pull/9539)
- 🐞 Fix uncorrect import of `turkish(tr_TR)` locale file. [#9373](https://github.com/ant-design/ant-design/issues/9373)
- 🌟 Add `orientation` prop for `Divider` to set the alignment of text in divider. [#9275](https://github.com/ant-design/ant-design/pull/9275) [@jrvboesch](https://github.com/jrvboesch)
- 🌟 Add `keyboard` prop for `Modal` to set whether Modal could be closed by `Esc` key. [#8818](https://github.com/ant-design/ant-design/issues/8818)
- 🌟 Improve the TypeScript definition of `event` param in `onChange` prop for `Radio` and `Checkbox`. [#9574](https://github.com/ant-design/ant-design/issues/9574)
- `Table`
- 🌟 Add `position` prop in `pagination` prop to set the position of pagination. [#9357](https://github.com/ant-design/ant-design/pull/9357) [@kanweiwei](https://github.com/kanweiwei)
- 🌟 Add event param of `onSelect` prop in `rowSelection` prop. [#9376](https://github.com/ant-design/ant-design/pull/9376) [@kanweiwei](https://github.com/kanweiwei)
- 🌟 Add `columnWidth` prop in `rowSelection` prop to set the column width of selection. [#9474](https://github.com/ant-design/ant-design/pull/9474) [@SimpleFrontend](https://github.com/SimpleFrontend)
- 🐞 Fix border radius issue in `Chrome` for `Table`. [af8e54f](https://github.com/ant-design/ant-design/commit/af8e54f1d6ac2891892e39b153cbe3e998370f61)
- 🌟 Add `pendingDot` prop for `Timeline` to set icon of ghost node. [#9546](https://github.com/ant-design/ant-design/pull/9546) [@SimpleFrontend](https://github.com/SimpleFrontend)
- 🌟 Add `inputReadOnly` prop for `TimePicker` to set if it's read only. [4a69446](https://github.com/ant-design/ant-design/commit/4a69446be155c1c176b18cb2c31459f999aa5d5e) [@JesperWe](https://github.com/JesperWe)
- 🌟 Add `dropdownClassName` prop for `TreeSelect`. [69b154f](https://github.com/ant-design/ant-design/commit/69b154f9a9cfa5f2d89a82b6ed730d4d8793de73) [56e4ce0](https://github.com/ant-design/ant-design/commit/56e4ce099d950601538d72243563021e8083776b)
- 🌟 Improve the preview for `Upload` when uploading the file of non-image format. [#9621](https://github.com/ant-design/ant-design/pull/9621) [@zswang](https://github.com/zswang)
- 🐞 Fix `successPercent` prop that cannot decide the success status for `Progress`. [#9382](https://github.com/ant-design/ant-design/issues/9382)
- 🐞 Fix font size for `Tabs`. [#9509](https://github.com/ant-design/ant-design/pull/9509)
- 🐞 Fix that disabled parent node cannot spread for `Tree` and `TreeSelect`. [#9539](https://github.com/ant-design/ant-design/pull/9539)
## 3.2.3
`2018-03-02`
- 🐞 Fix props `onPopupScroll` ts define in `Select`. [#9475](https://github.com/ant-design/ant-design/pull/9475) [@twobin](https://github.com/twobin)
- 🐞 Fix `Table` filter dropdown menu popup container. [#9209](https://github.com/ant-design/ant-design/issues/9209)
- 🐞 Fix `Timeline` head custom style error in chrome. [#9429](https://github.com/ant-design/ant-design/pull/9429) [@vthinkxie](https://github.com/vthinkxie)
- 🐞 Fix `Select` dropdown border. [82092c1](https://github.com/ant-design/ant-design/commit/82092c154ac1fa7ff2f89e1adbdf0aaf22e3ff53)
- 🐞 Fix compatibility with less 3. [#7850](https://github.com/ant-design/ant-design/issues/7850)
- 🐞 Fix `DatePicker.WeekPicker` year. [#9463](https://github.com/ant-design/ant-design/issues/9463)
- 🐞 Fix `Button.Group` align issue in chrome. [#9457](https://github.com/ant-design/ant-design/issues/9457)
## 3.2.2
`2018-02-24`
- 🌟 Add font-family variable for `Pagination`. [#9351](https://github.com/ant-design/ant-design/issues/9351)
- 🌟 Add font-weight variable for `Badge`. [#9352](https://github.com/ant-design/ant-design/issues/9352)
- 🐞 Fix table custom spin indicator. [#9355](https://github.com/ant-design/ant-design/issues/9355)
- 🐞 Fix `Form.create`. [#9331](https://github.com/ant-design/ant-design/issues/9331)
- 🐞 Revert typescript definition of `column.dataIndex`. [#9393](https://github.com/ant-design/ant-design/issues/9393)
- 🐞 Fix last menu item in Sider could be blocked by collapse trigger. [#9398](https://github.com/ant-design/ant-design/issues/9398) [@MJ111](https://github.com/MJ111)
- 🐞 Fix badge works wrong in dot mode. [#9359](https://github.com/ant-design/ant-design/issues/9359) [@khayalan-mathew](https://github.com/khayalan-mathew)
## 3.2.1
`2018-02-11`
- 🌟 Add icons of some famous products. [c04377e5](https://github.com/ant-design/ant-design/commit/c04377e5413d344b37c34ceac6fee456933fa516)
- Mention
- 🌟 `multiLines` mode will support autosize.
- 🐞 Fix paste not working when `placeholder` is specified. [#9215](https://github.com/ant-design/ant-design/issues/9215)
- Table
- 🐞 Fix padding of middle size table. [#9319](https://github.com/ant-design/ant-design/issues/9319)
- 🐞 Fix border bug of small size table. [#8980](https://github.com/ant-design/ant-design/issues/8980)
- 🐞 Fix overflow issue of sort icon interactive area. [#8979](https://github.com/ant-design/ant-design/issues/8979)
- 🌟 Improve typescript definition of `column.dataIndex`. [#9298](https://github.com/ant-design/ant-design/pull/9298) [@clinyong](https://github.com/clinyong)
- Select
- 🐞 Fix wrong scroll position when navigating active item with keyboard. [#9276](https://github.com/ant-design/ant-design/issues/9276)
- 🐞 Fix arrow position in IE11.
- 🐞 Fix issue that file item showing `uploading` when Upload `beforeUpload` return false. [#8020](https://github.com/ant-design/ant-design/issues/8020)
- 🐞 Fix misplace of feedback icon of `vertical` layout Form. [#9153](https://github.com/ant-design/ant-design/issues/9153)
- 🐞 Fix loading style missing of empty childen Card. [#9258](https://github.com/ant-design/ant-design/issues/9258)
- 🐞 Fix background color of Avatar when image source is not existe. [#9278](https://github.com/ant-design/ant-design/pull/9278) [@andriijas](https://github.com/andriijas)
- 🐞 Fix RangePicker `Cannot read property 'locale' of undefined` error when select end date. [#9267](https://github.com/ant-design/ant-design/issues/9267)
- 🐞 Fix style problem when using disabled button with Tooltip inside ButtonGroup. [#9296](https://github.com/ant-design/ant-design/issues/9296) [#9296](https://github.com/ant-design/ant-design/issues/9296)
- 🐞 Fix z-index of Dropdown's submenu. [#9218](https://github.com/ant-design/ant-design/issues/9218)
## 3.2.0
`2018-02-04`
- 🌟 Add new `tabBarGutter` prop to Tab to allow setting gutter between tabs. [#8644](https://github.com/ant-design/ant-design/pull/8644) [@lixiaoyang1992](https://github.com/lixiaoyang1992)
- 🌟 Add new `hasSider` prop to Layout to avoid render error when server rendering. [#8937](https://github.com/ant-design/ant-design/issues/8937)
- 🌟 Add new `successPercent` to Progress to allow showing two phases. [Demo](https://ant.design/components/progress/#components-progress-demo-segment)
- 🌟 Add new `iconType` prop to Alert to allow settting icon type. [#8811](https://github.com/ant-design/ant-design/pull/8811) [@minwe](https://github.com/ant-design/ant-design/pull/8811)
- 🌟 Add `id` prop to DatePicker. [#8598](https://github.com/ant-design/ant-design/pull/8598) [@mgrdevport](https://github.com/mgrdevport)
- 🌟 Add new `forceRender` prop to Collapse to allow rendering hide panel. [#9192](https://github.com/ant-design/ant-design/pull/9192) [#Pyroboomka](https://github.com/ant-design/ant-design/pull/9192) [@paulcmason](https://github.com/react-component/collapse/pull/82)
- RangePicker
- 🌟 Improve `ranges` prop to allow passing function to it. [#8281](https://github.com/ant-design/ant-design/issues/8281)
- 🐞 Fix issue resulting in can not input start date manually. [#6999](https://github.com/ant-design/ant-design/issues/6999)
- 🐞 Fix issue resulting date panel being closed without animation when click on the preset range. [#6364](https://github.com/ant-design/ant-design/issues/6364)
- 🐞 Fix issue resulting `onOk` is not being trigged, when click on the preset range. [#7747](https://github.com/ant-design/ant-design/issues/7747)
- Select
- 🌟 Improve `onChange`, `onDeselect`, they will receive selected `Option` as second paramteter.
- 🐞 Fix issue resulting in `onSelect` is not trigged when using automatic tokenization. [#9094](https://github.com/ant-design/ant-design/issues/9094)
- 🐞 Fix the missing scrollbar in Chrome.
- 🌟 Improve Table's `rowSelection[getCheckboxProps]` prop, now the all the properties returned by `getCheckboxProps` will be passed to checkbox. [#9054](https://github.com/ant-design/ant-design/pull/9054) [@mgrdevport](https://github.com/ant-design/ant-design/pull/9054)
- 🐞 Fix issue resulting in Calendar's `mode` not being allowed to be changed from outside. [#9243](https://github.com/ant-design/ant-design/pull/9243) [@mgrdevport](https://github.com/ant-design/ant-design/pull/9243)
- 🐞 Fix issue resulting AutoComplete showing wrong border when showing validattion message.[9f2b490](https://github.com/ant-design/ant-design/commit/9f2b4905f09fca503da7a8bb5f2b8347bea663b7)
- 🐞 Fix issue resulting in DatePicker showing wrong time in the control mode. [#8885](https://github.com/ant-design/ant-design/issues/8885)
- 🐞 Fix issue resulting in TextArea showing wrong height in Edge. [#9108](https://github.com/ant-design/ant-design/pull/9108) [@cuyl](https://github.com/cuyl)
- 🐞 Fix issue resulting in Tabs showing wrong tab style when using `type="card"` combine with `tabPosition="bottom"`. [#9165](https://github.com/ant-design/ant-design/pull/9165) [@ryanhoho](https://github.com/ryanhoho)
- 🌟 Add new Kurdish locale.
## 3.1.6
`2018-01-28`
- 🐞 Revert [#9141](https://github.com/ant-design/ant-design/pull/9141) since it causes year and month can not be selected in DatePicker.
## 3.1.5
`2018-01-27`
- 🐞 Fix Select Options were disappeared when click the scrollbar in IE11. [#7934](https://github.com/ant-design/ant-design/issues/7934) [@tianlang89757](https://github.com/tianlang89757)
- 🐞 Fix Form `getFieldDecorator` referenced item will conflicted when using the same id. [#9103](https://github.com/ant-design/ant-design/issues/9103) [#7351](https://github.com/ant-design/ant-design/issues/7351)
- 🐞 Fix RangePicker i18n issue which will shown the last language when change the language. [#8970](https://github.com/ant-design/ant-design/issues/8970)
- 🐞 Fix DatePicker shown wrong in the control mode. [#8885](https://github.com/ant-design/ant-design/issues/8885)
- 🐞 Fix Table shown emptyText when loading state. [#9095](https://github.com/ant-design/ant-design/pull/9095) [@sallen450](https://github.com/sallen450)
- 🐞 Add Icon `file-word`. [#9092](https://github.com/ant-design/ant-design/issues/9092) [#9061](https://github.com/ant-design/ant-design/issues/9061)
- 🐞 Fix wrong font family. [commit/506f97](https://github.com/ant-design/ant-design/commit/506f97640ec34a6d3d9fdb18e8036e5d34796a5f)
- 📖 Add some TypeScript type definitions
- Add `duration` for Notification. [pull/9120](https://github.com/ant-design/ant-design/pull/9120) [@duhongjun](https://github.com/duhongjun)
- Add `style` for Steps. [pull/9126](https://github.com/ant-design/ant-design/pull/9126) [@wanliyunyan](https://github.com/wanliyunyan)
- 🌟 Optimize Avatar default background color. [commit/275946](https://github.com/ant-design/ant-design/commit/275946090823ab8da90f1871976c671b2c7ac851)
- 🌟 Add the less variable for Slider and Menu. [pull/9065](https://github.com/ant-design/ant-design/pull/9065) [pull/9115](https://github.com/ant-design/ant-design/pull/9115) [@mrgeorgegray](https://github.com/mrgeorgegray)
## 3.1.4
`2018-01-21`
- 🐞 Fix ButtonGroup z-index issue. [#9014](https://github.com/ant-design/ant-design/issues/9014)
- 🐞 Fix Dropdown.Button can not be fully disabled. [#8991](https://github.com/ant-design/ant-design/issues/8991) [@sallen450](https://github.com/sallen450)
- 🐞 Fix Layout error responsive docs. [#8995](https://github.com/ant-design/ant-design/pull/8995) [@ReedSun](https://github.com/ReedSun)
- 🐞 Fix List `grid` do not support xxl. [#9019](https://github.com/ant-design/ant-design/issues/9019)
- 🐞 Fix RangePicker can not cancel selected start date when the panel is closed. [#8839](https://github.com/ant-design/ant-design/issues/8839)
- 🐞 Fix Tabs error margin. [commit/200d6c](https://github.com/ant-design/ant-design/commit/200d6cb11aba12a488510f957353bbd5bd1dcd1b)
- 🐞 Fix WeekPicker shows error weeks. [#9021](https://github.com/ant-design/ant-design/issues/9021)
- 🐞 Fix some TypeScript type definitions.
- Add `subMenuCloseDelay` and `subMenuOpenDelay` for Menu. [#8976](https://github.com/ant-design/ant-design/issues/8976) [@Rohanhacker](https://github.com/Rohanhacker)
- Refactor DatePicker types. [commit/0bb531](https://github.com/ant-design/ant-design/commit/0bb531aca6cb2045d5323196a599c925537a4eb0)
- Fix Input `maxLength` type definitions. [#9046](https://github.com/ant-design/ant-design/pull/9046) [@Riokai](https://github.com/Riokai)
- 🌟 Add some new less variables.
- About Checkbox and Radio: [#9003](https://github.com/ant-design/ant-design/pull/9003) [@mrgeorgegray](https://github.com/mrgeorgegray)
- About Breadcrumb: [#9022](https://github.com/ant-design/ant-design/pull/9022) [@mrgeorgegray](https://github.com/mrgeorgegray)
- 🌟 Add aliyun icon.
## 3.1.3
`2019-01-14`
`2018-01-14`
- 🐞 Fix error when passing `null` `locale` to LocaleProvider.
@@ -225,7 +465,7 @@ We provide a [migration tool](https://github.com/ant-design/antd-migration-helpe
- 🌟 `status` can use whith `children` now. [#8164](https://github.com/ant-design/ant-design/issues/8164)
- Card
- 🌟 Added new `inner` type. [Demo](https://ant.design/components/card/#components-card-demo-inner)。
- 🌟 Added `cover``actions` and a new `Meta` component. [Demo](https://ant.design/components/card/#components-card-demo-meta)。
- 🌟 Added `cover`, `actions` and a new `Meta` component. [Demo](https://ant.design/components/card/#components-card-demo-meta)。
- DatePicker
- 🌟 Added `mode` and `onPanelChange`to allow controlling the panel mode. [Demo](https://ant.design/components/date-picker/#components-date-picker-demo-mode)。
- 🌟 Added `WeekPicker` component. [Demo](https://ant.design/components/date-picker/#components-date-picker-demo-basic)
@@ -261,7 +501,7 @@ We provide a [migration tool](https://github.com/ant-design/antd-migration-helpe
- 🌟 Added `column[defaultSortOrder]` to allow setting default sort order. [#8111](https://github.com/ant-design/ant-design/pull/8111) [@megawac](https://github.com/megawac)
- 🌟 Added `rowSelection[fixed]` to allow fixing the selection column.。
- 🙅 Deprecated `getBodyWrapper`, please use `components` instead.
- 🙅 Deprecated `onRowClick``onRowDoubleClick``onRowContextMenu``onRowMouseEnter``onRowMouseLeave`, please use `onRow` instead.
- 🙅 Deprecated `onRowClick``onRowDoubleClick`, `onRowContextMenu`, `onRowMouseEnter`, `onRowMouseLeave`, please use `onRow` instead.
```javascript
<Table onRow={(record) => ({
onClick: () => {},

View File

@@ -15,9 +15,250 @@ timeline: true
---
## 3.4.4
`2018-04-28`
- 🐞 修复 3.4.2 中引入的 Upload 中 onChange 参数 `{ file }` file 不是 File 实例的问题。[#10293](https://github.com/ant-design/ant-design/issues/10293)
- 🐞 修复 webpack@4 下使用 Tree Shaking 样式丢失的问题。[#10217](https://github.com/ant-design/ant-design/pull/10217) [@whtsky](https://github.com/whtsky)
## 3.4.3
`2018-04-23`
- 🐞 修复了 webpack@4 下使用 Tree Shaking 样式丢失的问题。[#10197](https://github.com/ant-design/ant-design/pull/10197) [@Aladdin-ADD](https://github.com/Aladdin-ADD)
- 🐞 修复 `Menu` 组件在 `dark` 主题下点击区域的问题。[#10187](https://github.com/ant-design/ant-design/pull/10187) [@dgeibi](https://github.com/dgeibi)
## 3.4.2
`2018-04-22`
- 💄 部署网站到 [netlify](http://netlify.com/),解决网站被墙的问题。
- 🐞 修复和调整 Menu、Tooltip、Card、Anchor、Avatar、Form、Tabs、Transfer、Tree、AutoComplete 等组件的 TypeScript 定义。
- 💄 增加 `sideEffects` 配置以优化 Tree Shaking 效果。[#10043](https://github.com/ant-design/ant-design/pull/10043) [@Aladdin-ADD](https://github.com/Aladdin-ADD)
- List
- 🐞 修复多余边框问题。[#10028](https://github.com/ant-design/ant-design/issues/10028)
- 🐞 修复 `locale` 属性被传递给 div 的警告。[#10128](https://github.com/ant-design/ant-design/pull/10128) [@slonoed](https://github.com/slonoed)
- 🐞 修复 Upload 的文件 url 带有参数时,图片预览效果失效的问题。[#10102](https://github.com/ant-design/ant-design/issues/10102)
- 🐞 修复 Progress 的百分比越界时的展现。[0eb8357](https://github.com/ant-design/ant-design/commit/0eb835772dbaa7ed14babe03fc177821c5bd5ca5)
- Menu
- 🐞 修复 SubMenu 的失效箭头样式。[#10113](https://github.com/ant-design/ant-design/issues/10113)
- 🐞 修复 `collapsedWidth` 为像素字符串 `40px` 菜单宽度失效的问题。[#10140](https://github.com/ant-design/ant-design/issues/10140)
- 🐞 修复一个某些情况下 Form 内使用受控组件时无法编辑的问题。[#9790](https://github.com/ant-design/ant-design/issues/9790)
- 🐞 修复 Card 切换 loading 状态时的内边距跳动问题。[#10052](https://github.com/ant-design/ant-design/pull/10052) [@zheeeng](https://github.com/zheeeng)
- 🐞 修复 Avatar 图片加载失败时的文字没有正确缩放的问题。[#10184](https://github.com/ant-design/ant-design/pull/10184)
- 🐞 修复 Table 的 `getCheckboxProps` 无法动态更新的问题。[#10133](https://github.com/ant-design/ant-design/issues/10133)
- 🐞 修复 CheckGroup 指定 `prefixCls` 没有传递给 Checkbox 的问题。[#9950](https://github.com/ant-design/ant-design/issues/9950)
## 3.4.1
`2018-04-08`
- 🐞 修复了 Badge 代码错误引起的 TypeScript 类型报错。[#9931](https://github.com/ant-design/ant-design/issues/9931)
- 💄 优化了 Card `actions` 点击区域的范围。[#9882](https://github.com/ant-design/ant-design/issues/9882)
- 🐞 修复了 Divider 与浮动元素一起使用时的样式问题。[#9956](https://github.com/ant-design/ant-design/issues/9956)
- 🐞 修复了 Form 高级搜索模式下的样式问题。[#9907](https://github.com/ant-design/ant-design/issues/9907)
- 🐞 补充了 Table 缺失的 `onHeaderRow` TypeScript 定义。[#9902](https://github.com/ant-design/ant-design/pull/9902) [@Nokecy](https://github.com/Nokecy)
- 💄 优化了 Tree 自定义图标示例。[#9893](https://github.com/ant-design/ant-design/pull/9893)
- 🐞 修复了 Upload 对无扩展名图片地址的预览展示问题。[#9936](https://github.com/ant-design/ant-design/pull/9936)
## 3.4.0
`2018-04-01`
- Tree
- 🛠 在这个版本里,我们重构了 Tree 底层的代码,以解决一些存在了很久的问题。
- 🌟 新增 `defaultExpandParent` 用于在第一次渲染时自动展开父节点。
- 🌟 新增 `disabled` 用于禁用整棵树。
- 🌟 TreeNode 新增 `icon` 用于设置自定义图标。
- 🌟 优化了 TreeNode 设置 `disabled` 时的勾选逻辑。
- 🌟 Anchor 新增 `getContainer` 用于指定内容滚动的容器。
- 🌟 Table 新增 less 变量 `@table-expanded-row-bg`。[#9789](https://github.com/ant-design/ant-design/pull/9789)
- 🐞 修复一处 less 语法错误。[#9832](https://github.com/ant-design/ant-design/pull/9832) [@jojoLockLock](https://github.com/jojoLockLock)
- 🐞 修复 LocaleProvider 中 moment.locale 调用报错的问题。 [#9853](https://github.com/ant-design/ant-design/pull/9853)
- 🐞 修复 WeekPicker 的 style 属性不生效的问题。[#9848](https://github.com/ant-design/ant-design/issues/9848)
- 🐞 修复 Layout.Sider 的 TypeScript 定义。[#9885](https://github.com/ant-design/ant-design/pull/9885) [@zachguo](https://github.com/zachguo)
- 💄 优化了 Modal 中超长内容的显示。[#9592](https://github.com/ant-design/ant-design/pull/9592)
- 🌟 新增斯洛维尼亚语。
## 3.3.3
`2018-03-25`
- 回退上个版本 Upload 中 `file` 类型的修改。
## 3.3.2
`2018-03-24`
- 🐞 `Carousel`: 升级 `react-slick` 版本以修复宽度计算错误。 [#3659](https://github.com/ant-design/ant-design/issues/3659)
- 💄 `Rate`: 调整 `disabled` 样式。 [#9747](https://github.com/ant-design/ant-design/issues/9747)
- 💄 `Modal`: 调整 `confirm-modal` 样式以修复 content 内使用栅格会错位的问题。 [#9374](https://github.com/ant-design/ant-design/issues/9374)
- 💄 `Menu`: 调整样式以修复鼠标事件范围。[#9666](https://github.com/ant-design/ant-design/pull/9666) [@dgeibi](https://github.com/dgeibi)
- 🐞 `Upload`: 修复 `beforeUpload``file` 类型错误。 [#9775](https://github.com/ant-design/ant-design/issues/9775)
- 🐞 `Button`: 修复文本改变时,空格插入没有重新计算 [4502ad8](https://github.com/ant-design/ant-design/commit/4502ad8376e536c450fa4f27d2a5855be5a153e7)
## 3.3.1
`2018-03-18`
- 💄 调整 danger Button 的 `focus` 样式。
- 🐞 修复 enterButton 的值为 button 元素时显示错误的问题。 [#9639](https://github.com/ant-design/ant-design/issues/9639)
- 🐞 修复 Table 中的 `column.title` 的缺少 key 的问题。 [#9658](https://github.com/ant-design/ant-design/issues/9658) [@terence55](https://github.com/terence55)
- 🐞 修复 `scroll: { x: true }``.ant-table-scroll table`宽度为 `auto`的情况下不工作的问题。[#9704](https://github.com/ant-design/ant-design/pull/9704)
- 🐞 修复表单校验文字消失的时候输入框会抖一下的问题。 [#8831](https://github.com/ant-design/ant-design/issues/8831)
- 🐞 修复 `TimePicker` 里的 isMoment 调用在 parcel 里会报错的问题。[85c78e4](https://github.com/ant-design/ant-design/commit/85c78e49a91737c2841dc42621db21ca248b62b4)
- 💄 调整 Table 的圆角样式。 [#9674](https://github.com/ant-design/ant-design/pull/9674)
## 3.3.0
`2018-03-12`
- 🌟 `Alert` 组件新增 `afterClose` 属性,用于实现更流畅的关闭效果。[#9448](https://github.com/ant-design/ant-design/pull/9448) [@Hughen](https://github.com/Hughen)
- 🌟 `Calendar` 组件新增 `validRange` 属性,用于设置显示的时间范围。[71f65a0](https://github.com/ant-design/ant-design/commit/71f65a0be8e72a67f334c57e79ae3ff5fb640630) [@Rohanhacker](https://github.com/Rohanhacker)
- 🌟 `Card` 组件新增 `defaultActiveTabKey` 属性,用于初始化选中面板的 key。[30fe88d](https://github.com/ant-design/ant-design/commit/30fe88d4bdcec765bf92ca32a755d9646b36978e) [@u3u](https://github.com/u3u)
- `DatePicker`
- 🌟 新增 `dropdownClassName` 属性,用于设置弹出日历的 className。[#7211](https://github.com/ant-design/ant-design/issues/7211)
- 🐞 修复解析 `moment` 对象出错的问题。[#9539](https://github.com/ant-design/ant-design/pull/9539)
- 🐞 修复引入土耳其语 `tr_TR` 文件的问题。[#9373](https://github.com/ant-design/ant-design/issues/9373)
- 🌟 `Divider` 组件新增 `orientation` 属性,用于设置分割线内文本的对齐方式。[#9275](https://github.com/ant-design/ant-design/pull/9275) [@jrvboesch](https://github.com/jrvboesch)
- 🌟 `Modal` 组件新增 `keyboard` 属性,用于设置按下 `Esc` 键是否可以关闭 `Modal`。[#8818](https://github.com/ant-design/ant-design/issues/8818)
- 🌟 优化 `Radio``Checkbox` 组件 `onChange` 属性中的事件参数的 `TypeScript` 类型定义的问题。[#9574](https://github.com/ant-design/ant-design/issues/9574)
- `Table`
- 🌟 新增 `pagination` 属性的配置项 `position`,用于设置分页的显示位置。[#9357](https://github.com/ant-design/ant-design/pull/9357) [@kanweiwei](https://github.com/kanweiwei)
- 🌟 新增 `rowSelection` 属性的配置项 `onSelect` 回调函数的事件参数。[#9376](https://github.com/ant-design/ant-design/pull/9376) [@kanweiwei](https://github.com/kanweiwei)
- 🌟 新增 `rowSelection` 属性的配置项 `columnWidth`,用于设置选择框的列宽。[#9474](https://github.com/ant-design/ant-design/pull/9474) [@SimpleFrontend](https://github.com/SimpleFrontend)
- 🐞 修复 `Table` 组件在 `Chrome` 下圆角边框样式的问题。[af8e54f](https://github.com/ant-design/ant-design/commit/af8e54f1d6ac2891892e39b153cbe3e998370f61)
- 🌟 `Timeline` 组件新增 `pendingDot` 属性,用于设置幽灵节点的图标。[#9546](https://github.com/ant-design/ant-design/pull/9546) [@SimpleFrontend](https://github.com/SimpleFrontend)
- 🌟 `TimePicker` 组件新增 `inputReadOnly` 属性,用于设置组件是否只读。[4a69446](https://github.com/ant-design/ant-design/commit/4a69446be155c1c176b18cb2c31459f999aa5d5e) [@JesperWe](https://github.com/JesperWe)
- 🌟 `TreeSelect` 组件新增 `dropdownClassName` 属性。[69b154f](https://github.com/ant-design/ant-design/commit/69b154f9a9cfa5f2d89a82b6ed730d4d8793de73) [56e4ce0](https://github.com/ant-design/ant-design/commit/56e4ce099d950601538d72243563021e8083776b)
- 🌟 优化 `Upload` 组件在上传非图片格式文件时的预览效果。[#9621](https://github.com/ant-design/ant-design/pull/9621) [@zswang](https://github.com/zswang)
- 🐞 修复 `Progress` 组件的 `successPercent` 属性无法决定组件是否处于 `success` 状态的问题。[#9382](https://github.com/ant-design/ant-design/issues/9382)
- 🐞 修复 `Tabs` 组件字体尺寸的问题。[#9509](https://github.com/ant-design/ant-design/pull/9509)
- 🐞 修复 `Tree``TreeSelect` 组件的父节点在 `disabled` 状态下无法展开的问题。[#9539](https://github.com/ant-design/ant-design/pull/9539)
## 3.2.3
`2018-03-02`
- 🐞 修复组件 `Select` 中的 `onPopupScroll` 属性的 ts 定义。 [#9475](https://github.com/ant-design/ant-design/pull/9475) [@twobin](https://github.com/twobin)
- 🐞 修复 `Table` 过滤条件下拉选择框的问题。 [#9209](https://github.com/ant-design/ant-design/issues/9209)
- 🐞 修复 `Timeline` 自定义头部样式在 Chrome 下的显示问题。 [#9429](https://github.com/ant-design/ant-design/pull/9429) [@vthinkxie](https://github.com/vthinkxie)
- 🐞 修复 `Select` 下拉窗口的边框显示问题。 [82092c1](https://github.com/ant-design/ant-design/commit/82092c154ac1fa7ff2f89e1adbdf0aaf22e3ff53)
- 🐞 修复对 less 3 的兼容性问题。 [#7850](https://github.com/ant-design/ant-design/issues/7850)
- 🐞 修复 `DatePicker.WeekPicker` 年份问题。 [#9463](https://github.com/ant-design/ant-design/issues/9463)
- 🐞 修复 `Button.Group` 在 Chrome 下的定位对齐问题。 [#9457](https://github.com/ant-design/ant-design/issues/9457)
## 3.2.2
`2018-02-24`
- 🌟 添加 `Pagination` 字体变量。 [#9351](https://github.com/ant-design/ant-design/issues/9351)
- 🌟 添加 `Badge` 字重变量。 [#9352](https://github.com/ant-design/ant-design/issues/9352)
- 🐞 修复 `Table` 当自定义 `loading.indicator`不显示emptyText。 [#9355](https://github.com/ant-design/ant-design/issues/9355)
- 🐞 修复 `Form.create` 。 [#9331](https://github.com/ant-design/ant-design/issues/9331)
- 🐞 回滚 `Table``column.dataIndex` 的 TypeScript 定义。 [#9393](https://github.com/ant-design/ant-design/issues/9393)
- 🐞 修复 `Layout` 中 sider 高度不足时,最后一个菜单无法显示。 [#9398](https://github.com/ant-design/ant-design/issues/9398) [@MJ111](https://github.com/MJ111)
- 🐞 修复 `Badge` dot 模式问题。 [#9359](https://github.com/ant-design/ant-design/issues/9359) [@khayalan-mathew](https://github.com/khayalan-mathew)
## 3.2.1
`2018-02-11`
- 🌟 新增了部分著名产品的图标。[c04377e5](https://github.com/ant-design/ant-design/commit/c04377e5413d344b37c34ceac6fee456933fa516)
- Mention
- 🌟 现在 `multiLines` 模式的高度将默认自适应内容。
- 🐞 修复指定了 `placeholder` 时无法粘贴内容的问题。[#9215](https://github.com/ant-design/ant-design/issues/9215)
- Table
- 🐞 修复中号表格的 padding。[#9319](https://github.com/ant-design/ant-design/issues/9319)
- 🐞 修复小号表格的边框错位问题。[#8980](https://github.com/ant-design/ant-design/issues/8980)
- 🐞 修复排序图标点击区域溢出表头的问题。[#8979](https://github.com/ant-design/ant-design/issues/8979)
- 🌟 优化了 `column.dataIndex` 的 TypeScript 定义。[#9298](https://github.com/ant-design/ant-design/pull/9298) [@clinyong](https://github.com/clinyong)
- Select
- 🐞 修复使用键盘导航时,滚动条不会自动定位的问题。[#9276](https://github.com/ant-design/ant-design/issues/9276)
- 🐞 修复在 IE11 下的箭头位置。
- 🐞 修复 Upload `beforeUpload` 返回 `false` 时,上传文件仍然显示 `uploading` 以及文件列表被替换的问题。[#8020](https://github.com/ant-design/ant-design/issues/8020)
- 🐞 修复 `vertical` 布局的 Form 下反馈图标错位的问题。[#9153](https://github.com/ant-design/ant-design/issues/9153)
- 🐞 修复 Card 没有子节点时 `loading` 样式不生效的问题。[#9258](https://github.com/ant-design/ant-design/issues/9258)
- 🐞 修复 Avatar 的图片不存在时的背景色。[#9278](https://github.com/ant-design/ant-design/pull/9278) [@andriijas](https://github.com/andriijas)
- 🐞 修复 RangePicker 选择结束时间时报 `Cannot read property 'locale' of undefined` 的问题。[#9267](https://github.com/ant-design/ant-design/issues/9267)
- 🐞 修复 ButtonGroup 内使用了失效按钮和 Tooltip 时样式错位的问题。[#9296](https://github.com/ant-design/ant-design/issues/9296) [#9296](https://github.com/ant-design/ant-design/issues/9296)
- 🐞 修复 Dropdown 的子菜单被遮挡的问题。[#9218](https://github.com/ant-design/ant-design/issues/9218)
## 3.2.0
`2018-02-04`
- 🌟 Tab 新增 `tabBarGutter` 属性,用于设置 tabs 之间的间隙。[#8644](https://github.com/ant-design/ant-design/pull/8644) [@lixiaoyang1992](https://github.com/lixiaoyang1992)
- 🌟 Layout 新增 `hasSider` 属性,用于避免服务端渲染时显示问题。[#8937](https://github.com/ant-design/ant-design/issues/8937)
- 🌟 Progress 新增 `successPercent` 属性,用于显示分段进度条。[例子](https://ant.design/components/progress-cn/#components-progress-demo-segment)
- 🌟 Alert 新增 `iconType` 属性,用于显示自定义图标。[#8811](https://github.com/ant-design/ant-design/pull/8811) [@minwe](https://github.com/ant-design/ant-design/pull/8811)
- 🌟 DatePicker 新增 `id` 属性。[#8598](https://github.com/ant-design/ant-design/pull/8598) [@mgrdevport](https://github.com/mgrdevport)
- 🌟 Collapse 新增 `forceRender` 属性,用于渲染隐藏的内容。[#9192](https://github.com/ant-design/ant-design/pull/9192) [#Pyroboomka](https://github.com/ant-design/ant-design/pull/9192) [@paulcmason](https://github.com/react-component/collapse/pull/82)
- RangePicker
- 🌟 改进 `ranges` 属性,使其支持方法。[#8281](https://github.com/ant-design/ant-design/issues/8281)
- 🐞 修复无法手动输入开始时间的问题。[#6999](https://github.com/ant-design/ant-design/issues/6999)
- 🐞 修复点击预设范围关闭日期面板的时候没有动画的问题。[#6364](https://github.com/ant-design/ant-design/issues/6364)
- 🐞 修复点击预设范围时不触发 `onOk` 的问题。[#7747](https://github.com/ant-design/ant-design/issues/7747)
- Select
- 🌟 改进了 `onChange``onDeselect` 方法,现在他们会接受选中的 `Option` 作为第二个参数。
- 🐞 修复自动分词不触发 `onSelect` 的问题。[#9094](https://github.com/ant-design/ant-design/issues/9094)
- 🐞 修复 Chrome 上下拉框没有滚动条的问题。
- 🌟 改进 Table 的 `rowSelection[getCheckboxProps]` 属性,现在可以传任意属性给 chekbox 了。[#9054](https://github.com/ant-design/ant-design/pull/9054) [@mgrdevport](https://github.com/ant-design/ant-design/pull/9054)
- 🐞 修复 Calendar 的 `mode` 属性不能从外部控制的问题。[#9243](https://github.com/ant-design/ant-design/pull/9243) [@mgrdevport](https://github.com/ant-design/ant-design/pull/9243)
- 🐞 修复 AutoComplete 在 Form 中显示错误信息时的边框颜色。[9f2b490](https://github.com/ant-design/ant-design/commit/9f2b4905f09fca503da7a8bb5f2b8347bea663b7)
- 🐞 修复 DatePicker 在受控模式下时间显示不正确的问题。[#8885](https://github.com/ant-design/ant-design/issues/8885)
- 🐞 修复 TextArea 在 Edge 下高度计算错误的问题。[#9108](https://github.com/ant-design/ant-design/pull/9108) [@cuyl](https://github.com/cuyl)
- 🐞 修复 Tabs 在 card 模式且 tabPosition 是 `bottom` 时的样式问题。[#9165](https://github.com/ant-design/ant-design/pull/9165) [@ryanhoho](https://github.com/ryanhoho)
- 🌟 新增库尔德语。
## 3.1.6
`2018-01-28`
- 🐞 回退了 [#9141](https://github.com/ant-design/ant-design/pull/9141) 的修改,因其导致的 DatePicker 年月无法选择。
## 3.1.5
`2018-01-27`
- 🐞 修复了 Select 下拉选择框在 IE11 点击滚动条会无故消失的问题。[#7934](https://github.com/ant-design/ant-design/issues/7934) [@tianlang89757](https://github.com/tianlang89757)
- 🐞 修复了 Form 中使用 `getFieldDecorator` 当 id 重复时引用冲突的问题。[#9103](https://github.com/ant-design/ant-design/issues/9103) [#7351](https://github.com/ant-design/ant-design/issues/7351)
- 🐞 修复了 RangePicker 在语言切换时会显示上一次的语言的问题。[#8970](https://github.com/ant-design/ant-design/issues/8970)
- 🐞 修复了 DatePicker 在受控模式下时间显示不正确的问题。[#8885](https://github.com/ant-design/ant-design/issues/8885)
- 🐞 修复了 Table 在 `loading` 时显示空提示的问题。[#9095](https://github.com/ant-design/ant-design/pull/9095) [@sallen450](https://github.com/sallen450)
- 🐞 补充 Icon 类型 `file-word`。[#9092](https://github.com/ant-design/ant-design/issues/9092) [#9061](https://github.com/ant-design/ant-design/issues/9061)
- 🐞 修复写错的字体名称,造成浏览器无法正确识别的问题。[commit/506f97](https://github.com/ant-design/ant-design/commit/506f97640ec34a6d3d9fdb18e8036e5d34796a5f)
- 📖 修复了 TypeScript 定义
- 补充 Notification 缺失的 `duration` 定义。[pull/9120](https://github.com/ant-design/ant-design/pull/9120) [@duhongjun](https://github.com/duhongjun)
- 补充 Steps 缺失的 `style` 定义。[pull/9126](https://github.com/ant-design/ant-design/pull/9126) [@wanliyunyan](https://github.com/wanliyunyan)
- 🌟 优化了 Avatar 的默认背景色。[commit/275946](https://github.com/ant-design/ant-design/commit/275946090823ab8da90f1871976c671b2c7ac851)
- 🌟 新增了 Slider 以及 Menu 的 less 变量,更加方便的修改主题。[pull/9065](https://github.com/ant-design/ant-design/pull/9065) [pull/9115](https://github.com/ant-design/ant-design/pull/9115) [@mrgeorgegray](https://github.com/mrgeorgegray)
## 3.1.4
`2018-01-21`
- 🐞 修复 ButtonGroup 错误 z-index 导致的样式问题。[#9014](https://github.com/ant-design/ant-design/issues/9014)
- 🐞 修复 Dropdown.Button 不能被完全禁用的问题。[#8991](https://github.com/ant-design/ant-design/issues/8991) [@sallen450](https://github.com/sallen450)
- 🐞 修复 Layout 错误的响应式相关文档。[#8995](https://github.com/ant-design/ant-design/pull/8995) [@ReedSun](https://github.com/ReedSun)
- 🐞 修复 List `grid` 不支持 xxl 配置的问题。[#9019](https://github.com/ant-design/ant-design/issues/9019)
- 🐞 修复 RangePicker 关闭选择面板之后无法清空已选开始时间的问题。[#8839](https://github.com/ant-design/ant-design/issues/8839)
- 🐞 修复 Tabs 错误外边距导致的样式问题。[commit/200d6c](https://github.com/ant-design/ant-design/commit/200d6cb11aba12a488510f957353bbd5bd1dcd1b)
- 🐞 修复 WeekPicker 显示错误周数的问题。[#9021](https://github.com/ant-design/ant-design/issues/9021)
- 🐞 修复 TypeScript 定义
- 补充 Menu 缺失的 `subMenuCloseDelay``subMenuOpenDelay`。[#8976](https://github.com/ant-design/ant-design/issues/8976) [@Rohanhacker](https://github.com/Rohanhacker)
- 重构了 DatePicker 相关 type 定义。[commit/0bb531](https://github.com/ant-design/ant-design/commit/0bb531aca6cb2045d5323196a599c925537a4eb0)
- 修复了 Input `maxLength` type 定义。[#9046](https://github.com/ant-design/ant-design/pull/9046) [@Riokai](https://github.com/Riokai)
- 🌟 新增 less 变量
- Checkbox 和 Radio 相关:[#9003](https://github.com/ant-design/ant-design/pull/9003) [@mrgeorgegray](https://github.com/mrgeorgegray)
- Breadcrumb 相关:[#9022](https://github.com/ant-design/ant-design/pull/9022) [@mrgeorgegray](https://github.com/mrgeorgegray)
- 🌟 新增 aliyun 图标。
## 3.1.3
`2019-01-14`
`2018-01-14`
- 🐞 修复 `locale``null` 时 LocaleProvider 出错的问题。
@@ -284,7 +525,7 @@ timeline: true
```
- Select
- 🌟 默认和多选模式下 Option 的值允许使用 number。
- 🌟 新增 `maxTagCount 和 `maxTagPlaceholder`,用设置最多可显示的选中项。
- 🌟 新增 `maxTagCount 和 `maxTagPlaceholder`,用设置最多可显示的选中项。
- 🌟 新增 `showAction`,用于设置出发下拉框打开的事件。
- 🌟 新增 `onMouseEnter``onMouseLeave` 事件回调。
- LocaleProvider

View File

@@ -11,7 +11,7 @@
[![Dependency Status](https://img.shields.io/gemnasium/react-component/trigger.svg?style=flat-square)](https://gemnasium.com/ant-design/ant-design)
[![npm package](https://img.shields.io/npm/v/antd.svg?style=flat-square)](https://www.npmjs.org/package/antd)
[![NPM downloads](http://img.shields.io/npm/dm/antd.svg?style=flat-square)](https://npmjs.org/package/antd)
[![NPM downloads](http://img.shields.io/npm/dm/antd.svg?style=flat-square)](http://www.npmtrends.com/antd)
[![Percentage of issues still open](http://isitmaintained.com/badge/open/ant-design/ant-design.svg)](http://isitmaintained.com/project/ant-design/ant-design "Percentage of issues still open")
[![Gitter](https://badges.gitter.im/ant-design/ant-design-english.svg)](https://gitter.im/ant-design/ant-design-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) (English)
[![Join the chat at https://gitter.im/ant-design/ant-design](https://img.shields.io/gitter/room/ant-design/ant-design.svg?style=flat-square)](https://gitter.im/ant-design/ant-design?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)(中文)
@@ -25,7 +25,7 @@
- 提炼自企业级中后台产品的交互语言和视觉风格。
- 开箱即用的高质量 React 组件。
- 使用 TypeScript 构建,提供完整的类型定义文件。
- 基于 npm + webpack + [dva](https://github.com/dvajs/dva) 的企业级开发框架
- 全链路开发和设计工具体系
## 支持环境
@@ -35,7 +35,7 @@
## 参与共建 [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
`antd` 是一个开源项目,我们欢迎社区参与共建。如果你对此项目感兴趣,有 [很多方式](https://opensource.guide/how-to-contribute/) 进行参与。你可以 watch 这个仓库,加入 [issue 中的讨论](https://github.com/ant-design/ant-design/issues?q=is%3Aopen+is%3Aissue+label%3ADiscussion),以及尝试实现一些 [已接受的特性](https://github.com/ant-design/ant-design/issues?q=is%3Aopen+is%3Aissue+label%3A%22PR+welcome%22)。我们会给予有活跃贡献的社区成员 [collaborator 权限](https://github.com/ant-design/ant-design/issues/3222)
请参考[贡献指南](https://ant.design/docs/react/contributing-cn).
## 安装
@@ -88,6 +88,7 @@ import 'antd/dist/antd.css'; // or 'antd/dist/antd.less'
```bash
$ git clone git@github.com:ant-design/ant-design.git
$ cd ant-design
$ npm install
$ npm start
```

View File

@@ -11,7 +11,7 @@
[![Dependency Status](https://img.shields.io/gemnasium/react-component/trigger.svg?style=flat-square)](https://gemnasium.com/ant-design/ant-design)
[![npm package](https://img.shields.io/npm/v/antd.svg?style=flat-square)](https://www.npmjs.org/package/antd)
[![NPM downloads](http://img.shields.io/npm/dm/antd.svg?style=flat-square)](https://npmjs.org/package/antd)
[![NPM downloads](http://img.shields.io/npm/dm/antd.svg?style=flat-square)](http://www.npmtrends.com/antd)
[![Percentage of issues still open](http://isitmaintained.com/badge/open/ant-design/ant-design.svg)](http://isitmaintained.com/project/ant-design/ant-design "Percentage of issues still open")
[![Gitter](https://badges.gitter.im/ant-design/ant-design-english.svg)](https://gitter.im/ant-design/ant-design-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) (English)
[![Join the chat at https://gitter.im/ant-design/ant-design](https://img.shields.io/gitter/room/ant-design/ant-design.svg?style=flat-square)](https://gitter.im/ant-design/ant-design?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)(中文)
@@ -26,10 +26,10 @@ An enterprise-class UI design language and React-based implementation.
## Features
- An enterprise-class UI design language for web applications.
- An enterprise-class UI design system for desktop applications.
- A set of high-quality React components out of the box.
- Written in TypeScript with complete define types.
- A npm + webpack + [dva](https://github.com/dvajs/dva) front-end development workflow.
- Written in TypeScript with predictable static types.
- The whole package of development and design resources and tools.
## Environment Support
@@ -39,7 +39,7 @@ An enterprise-class UI design language and React-based implementation.
## Let's build a better antd together [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
Read our [contributing guide](./.github/CONTRIBUTING.md).
Read our [contributing guide](https://ant.design/docs/react/contributing).
## Install
@@ -92,6 +92,7 @@ See [i18n](http://ant.design/docs/react/i18n).
```bash
$ git clone git@github.com:ant-design/ant-design.git
$ cd ant-design
$ npm install
$ npm start
```

View File

@@ -1,7 +1,15 @@
import * as antd from '..';
const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
const antd = require('..');
describe('antd', () => {
it('exports modules correctly', () => {
expect(Object.keys(antd)).toMatchSnapshot();
});
it('should hint when import all components', () => {
expect(warnSpy).toBeCalledWith(
'You are using a whole package of antd, please use https://www.npmjs.com/package/babel-plugin-import to reduce app bundle size.'
);
warnSpy.mockRestore();
});
});

View File

@@ -1,4 +0,0 @@
// https://github.com/moment/moment/issues/3650
export default function callMoment(moment: any, ...args: any[]) {
return (moment.default || moment)(...args);
}

View File

@@ -0,0 +1,4 @@
// https://github.com/moment/moment/issues/3650
export default function interopDefault(m: any) {
return m.default || m;
}

View File

@@ -2,7 +2,7 @@ import getRequestAnimationFrame, { cancelRequestAnimationFrame } from '../_util/
const reqAnimFrame = getRequestAnimationFrame();
export default function throttleByAnimationFrame(fn: () => void) {
export default function throttleByAnimationFrame(fn: (...args: any[]) => void) {
let requestId: number | null;
const later = (args: any[]) => () => {

3
components/_util/type.ts Normal file
View File

@@ -0,0 +1,3 @@
export type Diff<T extends string, U extends string> = ({ [P in T]: P } &
{ [P in U]: never } & { [x: string]: never })[T];
export type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>;

View File

@@ -95,6 +95,7 @@ export default class Affix extends React.Component<AffixProps, AffixState> {
};
private fixedNode: HTMLElement;
private placeholderNode: HTMLElement;
setAffixStyle(e: any, affixStyle: React.CSSProperties | null) {
const { onChange = noop, target = getDefaultTarget } = this.props;
@@ -123,6 +124,21 @@ export default class Affix extends React.Component<AffixProps, AffixState> {
this.setState({ placeholderStyle: placeholderStyle as React.CSSProperties });
}
syncPlaceholderStyle(e: any) {
const { affixStyle } = this.state;
if (!affixStyle) {
return;
}
this.placeholderNode.style.cssText = '';
this.setAffixStyle(e, {
...affixStyle,
width: this.placeholderNode.offsetWidth,
});
this.setPlaceholderStyle({
width: this.placeholderNode.offsetWidth,
});
}
@throttleByAnimationFrameDecorator()
updatePosition(e: any) {
let { offsetTop, offsetBottom, offset, target = getDefaultTarget } = this.props;
@@ -194,6 +210,10 @@ export default class Affix extends React.Component<AffixProps, AffixState> {
}
this.setPlaceholderStyle(null);
}
if (e.type === 'resize') {
this.syncPlaceholderStyle(e);
}
}
componentDidMount() {
@@ -245,6 +265,10 @@ export default class Affix extends React.Component<AffixProps, AffixState> {
this.fixedNode = node;
}
savePlaceholderNode = (node: HTMLDivElement) => {
this.placeholderNode = node;
}
render() {
const className = classNames({
[this.props.prefixCls || 'ant-affix']: this.state.affixStyle,
@@ -253,7 +277,7 @@ export default class Affix extends React.Component<AffixProps, AffixState> {
const props = omit(this.props, ['prefixCls', 'offsetTop', 'offsetBottom', 'target', 'onChange']);
const placeholderStyle = { ...this.state.placeholderStyle, ...this.props.style };
return (
<div {...props} style={placeholderStyle}>
<div {...props} style={placeholderStyle} ref={this.savePlaceholderNode}>
<div className={className} ref={this.saveFixedNode} style={this.state.affixStyle}>
{this.props.children}
</div>

View File

@@ -366,6 +366,34 @@ exports[`renders ./components/alert/demo/icon.md correctly 1`] = `
</div>
`;
exports[`renders ./components/alert/demo/smooth-closed.md correctly 1`] = `
<div>
<div
class="ant-alert ant-alert-success ant-alert-no-icon"
data-show="true"
>
<span
class="ant-alert-message"
>
Alert Message Text
</span>
<span
class="ant-alert-description"
/>
<a
class="ant-alert-close-icon"
>
<i
class="anticon anticon-cross"
/>
</a>
</div>
<p>
placeholder text here
</p>
</div>
`;
exports[`renders ./components/alert/demo/style.md correctly 1`] = `
<div>
<div

View File

@@ -0,0 +1,48 @@
---
order: 7
title:
zh-CN: 平滑地卸载
en-US: Smoothly Unmount
---
## zh-CN
平滑、自然的卸载提示
## en-US
Smoothly and unaffectedly unmount Alert.
````jsx
import { Alert } from 'antd';
class App extends React.Component {
state = {
visible: true,
}
handleClose = () => {
this.setState({ visible: false });
}
render() {
return (
<div>
{
this.state.visible ? (
<Alert
message="Alert Message Text"
type="success"
closable
afterClose={this.handleClose}
/>
) : null
}
<p>placeholder text here</p>
</div>
);
}
}
ReactDOM.render(
<App />
, mountNode);
````

View File

@@ -15,11 +15,13 @@ Alert component for feedback.
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| afterClose | Called when close animation is finished | () => void | - |
| banner | Whether to show as banner | boolean | false |
| closable | Whether Alert can be closed | boolean | - |
| closeText | Close text to show | string\|ReactNode | - |
| description | Additional content of Alert | string\|ReactNode | - |
| message | Content of Alert | string\|ReactNode | - |
| showIcon | Whether to show icon | boolean | false, in `banner` mode default is true |
| iconType | Icon type, effective when `showIcon` is `true` | string | - |
| type | Type of Alert styles, options: `success`, `info`, `warning`, `error` | string | `info`, in `banner` mode default is `warning` |
| onClose | Callback when Alert is closed | Function | - |
| onClose | Callback when Alert is closed | (e: MouseEvent) => void | - |

View File

@@ -21,8 +21,11 @@ export interface AlertProps {
description?: React.ReactNode;
/** Callback when close Alert */
onClose?: React.MouseEventHandler<HTMLAnchorElement>;
/** Trigger when animation ending of Alert */
afterClose?: () => void;
/** Whether to show icon */
showIcon?: boolean;
iconType?: string;
style?: React.CSSProperties;
prefixCls?: string;
className?: string;
@@ -55,11 +58,12 @@ export default class Alert extends React.Component<AlertProps, any> {
closed: true,
closing: true,
});
(this.props.afterClose || noop)();
}
render() {
let {
closable, description, type, prefixCls = 'ant-alert', message, closeText, showIcon, banner,
className = '', style,
className = '', style, iconType,
} = this.props;
// banner模式默认有 Icon
@@ -67,27 +71,28 @@ export default class Alert extends React.Component<AlertProps, any> {
// banner模式默认为警告
type = banner && type === undefined ? 'warning' : type || 'info';
let iconType = '';
switch (type) {
case 'success':
iconType = 'check-circle';
break;
case 'info':
iconType = 'info-circle';
break;
case 'error':
iconType = 'cross-circle';
break;
case 'warning':
iconType = 'exclamation-circle';
break;
default:
iconType = 'default';
}
if (!iconType) {
switch (type) {
case 'success':
iconType = 'check-circle';
break;
case 'info':
iconType = 'info-circle';
break;
case 'error':
iconType = 'cross-circle';
break;
case 'warning':
iconType = 'exclamation-circle';
break;
default:
iconType = 'default';
}
// use outline icon in alert with description
if (!!description) {
iconType += '-o';
// use outline icon in alert with description
if (!!description) {
iconType += '-o';
}
}
let alertCls = classNames(prefixCls, {

View File

@@ -16,11 +16,13 @@ title: Alert
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| afterClose | 关闭动画结束后的回掉 | () => void | - |
| banner | 是否用作顶部公告 | boolean | false |
| closable | 默认不显示关闭按钮 | boolean | 无 |
| closeText | 自定义关闭按钮 | string\|ReactNode | 无 |
| description | 警告提示的辅助性文字介绍 | string\|ReactNode | 无 |
| message | 警告提示内容 | string\|ReactNode | 无 |
| showIcon | 是否显示辅助图标 | boolean | false`banner` 模式下默认值为 true |
| iconType | 自定义图标类型,`showIcon``true` 时有效 | string | - |
| type | 指定警告提示的样式,有四种选择 `success``info``warning``error` | string | `info``banner` 模式下默认值为 `warning` |
| onClose | 关闭时触发的回调函数 | Function | 无 |
| onClose | 关闭时触发的回调函数 | (e: MouseEvent) => void | 无 |

View File

@@ -8,11 +8,11 @@ import AnchorLink from './AnchorLink';
import getScroll from '../_util/getScroll';
import getRequestAnimationFrame from '../_util/getRequestAnimationFrame';
function getDefaultTarget() {
function getDefaultContainer() {
return window;
}
function getOffsetTop(element: HTMLElement): number {
function getOffsetTop(element: HTMLElement, container: AnchorContainer): number {
if (!element) {
return 0;
}
@@ -24,9 +24,11 @@ function getOffsetTop(element: HTMLElement): number {
const rect = element.getBoundingClientRect();
if (rect.width || rect.height) {
const doc = element.ownerDocument;
const docElem = doc.documentElement;
return rect.top - docElem.clientTop;
if (container === window) {
container = element.ownerDocument.documentElement;
return rect.top - container.clientTop;
}
return rect.top - (container as HTMLElement).getBoundingClientRect().top;
}
return rect.top;
@@ -43,21 +45,27 @@ function easeInOutCubic(t: number, b: number, c: number, d: number) {
const reqAnimFrame = getRequestAnimationFrame();
const sharpMatcherRegx = /#([^#]+)$/;
function scrollTo(href: string, offsetTop = 0, target: () => Window | HTMLElement, callback = () => { }) {
const scrollTop = getScroll(target(), true);
function scrollTo(href: string, offsetTop = 0, getContainer: () => AnchorContainer, callback = () => { }) {
const container = getContainer();
const scrollTop = getScroll(container, true);
const sharpLinkMatch = sharpMatcherRegx.exec(href);
if (!sharpLinkMatch) { return; }
const targetElement = document.getElementById(sharpLinkMatch[1]);
if (!targetElement) {
return;
}
const eleOffsetTop = getOffsetTop(targetElement);
const eleOffsetTop = getOffsetTop(targetElement, container);
const targetScrollTop = scrollTop + eleOffsetTop - offsetTop;
const startTime = Date.now();
const frameFunc = () => {
const timestamp = Date.now();
const time = timestamp - startTime;
window.scrollTo(window.pageXOffset, easeInOutCubic(time, scrollTop, targetScrollTop, 450));
const nextScrollTop = easeInOutCubic(time, scrollTop, targetScrollTop, 450);
if (container === window) {
window.scrollTo(window.pageXOffset, nextScrollTop);
} else {
(container as HTMLElement).scrollTop = nextScrollTop;
}
if (time < 450) {
reqAnimFrame(frameFunc);
} else {
@@ -73,6 +81,8 @@ type Section = {
top: number;
};
export type AnchorContainer = HTMLElement | Window;
export interface AnchorProps {
prefixCls?: string;
className?: string;
@@ -82,7 +92,14 @@ export interface AnchorProps {
bounds?: number;
affix?: boolean;
showInkInFixed?: boolean;
target?: () => HTMLElement | Window;
getContainer?: () => AnchorContainer;
}
export interface AnchorDefaultProps extends AnchorProps {
prefixCls: string;
affix: boolean;
showInkInFixed: boolean;
getContainer: () => AnchorContainer;
}
export default class Anchor extends React.Component<AnchorProps, any> {
@@ -92,6 +109,7 @@ export default class Anchor extends React.Component<AnchorProps, any> {
prefixCls: 'ant-anchor',
affix: true,
showInkInFixed: false,
getContainer: getDefaultContainer,
};
static childContextTypes = {
@@ -133,8 +151,8 @@ export default class Anchor extends React.Component<AnchorProps, any> {
}
componentDidMount() {
const getTarget = this.props.target || getDefaultTarget;
this.scrollEvent = addEventListener(getTarget(), 'scroll', this.handleScroll);
const { getContainer } = this.props as AnchorDefaultProps;
this.scrollEvent = addEventListener(getContainer(), 'scroll', this.handleScroll);
this.handleScroll();
}
@@ -159,10 +177,10 @@ export default class Anchor extends React.Component<AnchorProps, any> {
}
handleScrollTo = (link: string) => {
const { offsetTop, target = getDefaultTarget } = this.props;
const { offsetTop, getContainer } = this.props as AnchorDefaultProps;
this.animating = true;
this.setState({ activeLink: link });
scrollTo(link, offsetTop, target, () => {
scrollTo(link, offsetTop, getContainer, () => {
this.animating = false;
});
}
@@ -174,16 +192,20 @@ export default class Anchor extends React.Component<AnchorProps, any> {
}
const linkSections: Array<Section> = [];
const { getContainer } = this.props as AnchorDefaultProps;
const container = getContainer();
this.links.forEach(link => {
const sharpLinkMatch = sharpMatcherRegx.exec(link.toString());
if (!sharpLinkMatch) { return; }
const target = document.getElementById(sharpLinkMatch[1]);
if (target && getOffsetTop(target) < offsetTop + bounds) {
const top = getOffsetTop(target);
linkSections.push({
link,
top,
});
if (target) {
const top = getOffsetTop(target, container);
if (top < offsetTop + bounds) {
linkSections.push({
link,
top,
});
}
}
});
@@ -199,7 +221,8 @@ export default class Anchor extends React.Component<AnchorProps, any> {
return;
}
const { prefixCls } = this.props;
const linkNode = ReactDOM.findDOMNode(this as any).getElementsByClassName(`${prefixCls}-link-title-active`)[0];
const anchorNode = ReactDOM.findDOMNode(this) as Element;
const linkNode = anchorNode.getElementsByClassName(`${prefixCls}-link-title-active`)[0];
if (linkNode) {
this.inkNode.style.top = `${(linkNode as any).offsetTop + linkNode.clientHeight / 2 - 4.5}px`;
}

View File

@@ -19,6 +19,7 @@ For displaying anchor hyperlinks on page and jumping between them.
| -------- | ----------- | ---- | ------- |
| affix | Fixed mode of Anchor | boolean | true |
| bounds | Bounding distance of anchor area | number | 5(px) |
| getContainer | Scrolling container | () => HTMLElement | () => window |
| offsetBottom | Pixels to offset from bottom when calculating position of scroll | number | - |
| offsetTop | Pixels to offset from top when calculating position of scroll | number | 0 |
| showInkInFixed | Whether show ink-balls in Fixed mode | boolean | false |

View File

@@ -20,6 +20,7 @@ title: Anchor
| --- | --- | --- | --- |
| affix | 固定模式 | boolean | true |
| bounds | 锚点区域边界 | number | 5(px) |
| getContainer | 指定滚动的容器 | () => HTMLElement | () => window |
| offsetBottom | 距离窗口底部达到指定偏移量后触发 | number | |
| offsetTop | 距离窗口顶部达到指定偏移量后触发 | number | |
| showInkInFixed | 固定模式是否显示小圆点 | boolean | false |

View File

@@ -21,7 +21,7 @@ export type ValidInputElement =
export interface AutoCompleteProps extends AbstractSelectProps {
value?: SelectValue;
defaultValue?: SelectValue;
dataSource: DataSourceItemType[];
dataSource?: DataSourceItemType[];
optionLabelProp?: string;
onChange?: (value: SelectValue) => void;
onSelect?: (value: SelectValue, option: Object) => any;

View File

@@ -8,4 +8,22 @@ describe('Avatar Render', () => {
const children = wrapper.find('.ant-avatar-string');
expect(children.length).toBe(1);
});
it('should render fallback string correctly', () => {
const div = global.document.createElement('div');
global.document.body.appendChild(div);
const wrapper = mount(<Avatar src="http://error.url">Fallback</Avatar>, { attachTo: div });
wrapper.instance().setScale = jest.fn(() => wrapper.instance().setState({ scale: 0.5 }));
wrapper.setState({ isImgExist: false });
const children = wrapper.find('.ant-avatar-string');
expect(children.length).toBe(1);
expect(children.text()).toBe('Fallback');
expect(wrapper.instance().setScale).toBeCalled();
expect(div.querySelector('.ant-avatar-string').style.transform).toBe('scale(0.5)');
wrapper.detach();
global.document.body.removeChild(div);
});
});

View File

@@ -46,7 +46,8 @@ export default class Avatar extends React.Component<AvatarProps, AvatarState> {
componentDidUpdate(prevProps: AvatarProps, prevState: AvatarState) {
if (prevProps.children !== this.props.children
|| (prevState.scale !== this.state.scale && this.state.scale === 1)) {
|| (prevState.scale !== this.state.scale && this.state.scale === 1)
|| (prevState.isImgExist !== this.state.isImgExist)) {
this.setScale();
}
}
@@ -55,7 +56,8 @@ export default class Avatar extends React.Component<AvatarProps, AvatarState> {
const childrenNode = this.avatarChildren;
if (childrenNode) {
const childrenWidth = childrenNode.offsetWidth;
const avatarWidth = ReactDOM.findDOMNode(this).getBoundingClientRect().width;
const avatarNode = ReactDOM.findDOMNode(this) as Element;
const avatarWidth = avatarNode.getBoundingClientRect().width;
// add 4px gap for each side to get better performance
if (avatarWidth - 8 < childrenWidth) {
this.setState({
@@ -83,7 +85,7 @@ export default class Avatar extends React.Component<AvatarProps, AvatarState> {
const classString = classNames(prefixCls, className, sizeCls, {
[`${prefixCls}-${shape}`]: shape,
[`${prefixCls}-image`]: src,
[`${prefixCls}-image`]: src && this.state.isImgExist,
[`${prefixCls}-icon`]: icon,
});

View File

@@ -12,6 +12,11 @@
white-space: nowrap;
position: relative;
overflow: hidden;
vertical-align: middle;
&-image {
background: transparent;
}
.avatar-size(@avatar-size-base, @avatar-font-size-base);

View File

@@ -19,6 +19,6 @@ describe('BackTop', () => {
jest.runAllTimers();
wrapper.find('.ant-back-top').simulate('click');
jest.runAllTimers();
expect(Math.round(document.documentElement.scrollTop)).toBe(0);
expect(Math.abs(Math.round(document.documentElement.scrollTop))).toBe(0);
});
});

View File

@@ -106,7 +106,7 @@ export default class ScrollNumber extends Component<ScrollNumberProps, ScrollNum
return createElement('span', {
className: `${this.props.prefixCls}-only`,
style: {
transition: removeTransition && 'none',
transition: removeTransition ? 'none' : undefined,
msTransform: `translateY(${-position * 100}%)`,
WebkitTransform: `translateY(${-position * 100}%)`,
transform: `translateY(${-position * 100}%)`,

View File

@@ -423,6 +423,13 @@ exports[`renders ./components/badge/demo/dot.md correctly 1`] = `
data-show="true"
/>
</span>
<span
class="ant-badge"
>
<i
class="anticon anticon-notification"
/>
</span>
<span
class="ant-badge"
>

View File

@@ -0,0 +1,14 @@
import React from 'react';
import { mount } from 'enzyme';
import Badge from '../index';
describe('Badge', () => {
test('badge dot not scaling count > 9', () => {
const badge = mount(<Badge count={10} dot />);
expect(badge.find('.ant-card-multiple-words').length).toBe(0);
});
test('badge dot not showing count == 0', () => {
const badge = mount(<Badge count={0} dot />);
expect(badge.find('.ant-badge-dot').length).toBe(0);
});
});

View File

@@ -12,6 +12,7 @@ title:
## en-US
This will simply display a red badge, without a specific count.
If count equals 0, it won't display the dot.
````jsx
import { Badge, Icon } from 'antd';
@@ -21,6 +22,9 @@ ReactDOM.render(
<Badge dot>
<Icon type="notification" />
</Badge>
<Badge count={0} dot>
<Icon type="notification" />
</Badge>
<Badge dot>
<a href="#">Link something</a>
</Badge>

View File

@@ -26,7 +26,7 @@ Badge normally appears in proximity to notifications or user avatars with eye-ca
| -------- | ----------- | ---- | ------- |
| count | Number to show in badge | number\|ReactNode | |
| dot | Whether to display a red dot instead of `count` | boolean | `false` |
| offset | set offset of the badge dot, like [x, y] | [number, number] | - |
| offset | set offset of the badge dot, like`[x, y]` | `[number, number]` | - |
| overflowCount | Max count to show | number | 99 |
| showZero | Whether to show badge when `count` is zero | boolean | `false` |
| status | Set Badge as a status dot | `success` \| `processing` \| `default` \| `error` \| `warning` | `''` |

View File

@@ -59,14 +59,13 @@ export default class Badge extends React.Component<BadgeProps, any> {
offset,
...restProps,
} = this.props;
const isDot = dot || status;
let displayCount = (count as number) > (overflowCount as number) ? `${overflowCount}+` : count;
const isZero = displayCount === '0' || displayCount === 0;
const isDot = (dot && !isZero) || status;
// dot mode don't need count
if (isDot) {
displayCount = '';
}
const isZero = displayCount === '0' || displayCount === 0;
const isEmpty = displayCount === null || displayCount === undefined || displayCount === '';
const hidden = (isEmpty || (isZero && !showZero)) && !isDot;
const statusCls = classNames({
@@ -76,7 +75,7 @@ export default class Badge extends React.Component<BadgeProps, any> {
const scrollNumberCls = classNames({
[`${prefixCls}-dot`]: isDot,
[`${prefixCls}-count`]: !isDot,
[`${prefixCls}-multiple-words`]: count && count.toString && count.toString().length > 1,
[`${prefixCls}-multiple-words`]: !isDot && count && count.toString && count.toString().length > 1,
[`${prefixCls}-status-${status}`]: !!status,
});
const badgeCls = classNames(className, prefixCls, {

View File

@@ -27,7 +27,7 @@ title: Badge
| --- | --- | --- | --- |
| count | 展示的数字,大于 overflowCount 时显示为 `${overflowCount}+`,为 0 时隐藏 | number\|ReactNode | |
| dot | 不展示数字,只有一个小红点 | boolean | false |
| offset | 设置状态点的位置偏移,格式为 [x, y] | [number, number] | - |
| offset | 设置状态点的位置偏移,格式为 `[x, y]` | `[number, number]` | - |
| overflowCount | 展示封顶的数字值 | number | 99 |
| showZero | 当数值为 0 时,是否展示 Badge | boolean | false |
| status | 设置 Badge 为状态点 | Enum{ 'success', 'processing, 'default', 'error', 'warning' } | '' |

View File

@@ -24,6 +24,7 @@
text-align: center;
padding: 0 6px;
font-size: @badge-font-size;
font-weight: @badge-font-weight;
white-space: nowrap;
transform-origin: -10% center;
box-shadow: 0 0 0 1px #fff;
@@ -112,7 +113,10 @@
top: auto;
display: block;
position: relative;
transform: none !important;
}
&-not-a-wrapper .@{badge-prefix-cls}-count {
transform: none;
}
}

View File

@@ -5,22 +5,23 @@
.@{breadcrumb-prefix-cls} {
.reset-component;
color: @text-color-secondary;
color: @breadcrumb-base-color;
font-size: @breadcrumb-font-size;
.@{iconfont-css-prefix} {
font-size: @font-size-sm;
font-size: @breadcrumb-icon-font-size;
}
a {
color: @text-color-secondary;
color: @breadcrumb-link-color;
transition: color .3s;
&:hover {
color: @primary-5;
color: @breadcrumb-link-color-hover;
}
}
& > span:last-child {
color: @text-color;
color: @breadcrumb-last-item-color;
}
& > span:last-child &-separator {
@@ -28,8 +29,8 @@
}
&-separator {
margin: 0 @padding-xs;
color: @text-color-secondary;
margin: @breadcrumb-separator-margin;
color: @breadcrumb-separator-color;
}
&-link {

View File

@@ -212,7 +212,7 @@ exports[`renders ./components/button/demo/disabled.md correctly 1`] = `
</button>
<br />
<button
class="ant-btn"
class="ant-btn ant-btn-background-ghost"
type="button"
>
<span>
@@ -220,7 +220,7 @@ exports[`renders ./components/button/demo/disabled.md correctly 1`] = `
</span>
</button>
<button
class="ant-btn"
class="ant-btn ant-btn-background-ghost"
disabled=""
type="button"
>
@@ -481,6 +481,7 @@ exports[`renders ./components/button/demo/size.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="large"
/>
<span
class="ant-radio-button-inner"
@@ -499,6 +500,7 @@ exports[`renders ./components/button/demo/size.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="default"
/>
<span
class="ant-radio-button-inner"
@@ -517,6 +519,7 @@ exports[`renders ./components/button/demo/size.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="small"
/>
<span
class="ant-radio-button-inner"

View File

@@ -28,6 +28,24 @@ describe('Button', () => {
expect(wrapper2).toMatchSnapshot();
});
it('renders Chinese characters correctly in HOC', () => {
const Text = props => <span>{props.children}</span>;
const wrapper = mount(
<Button><Text>按钮</Text></Button>
);
expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(true);
wrapper.setProps({
children: <Text>大按钮</Text>,
});
wrapper.update();
expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(false);
wrapper.setProps({
children: <Text>按钮</Text>,
});
wrapper.update();
expect(wrapper.find('.ant-btn').hasClass('ant-btn-two-chinese-chars')).toBe(true);
});
it('have static perperty for type detecting', () => {
const wrapper = mount(
<Button>Button Text</Button>

View File

@@ -34,7 +34,7 @@ function insertSpace(child: React.ReactChild, needInserted: boolean) {
return child;
}
export type ButtonType = 'primary' | 'ghost' | 'dashed' | 'danger';
export type ButtonType = 'default' | 'primary' | 'ghost' | 'dashed' | 'danger';
export type ButtonShape = 'circle' | 'circle-outline';
export type ButtonSize = 'small' | 'default' | 'large';
@@ -47,6 +47,8 @@ export interface ButtonProps {
onClick?: React.FormEventHandler<any>;
onMouseUp?: React.FormEventHandler<any>;
onMouseDown?: React.FormEventHandler<any>;
onKeyPress?: React.KeyboardEventHandler<any>;
onKeyDown?: React.KeyboardEventHandler<any>;
tabIndex?: number;
loading?: boolean | { delay?: number };
disabled?: boolean;
@@ -93,13 +95,7 @@ export default class Button extends React.Component<ButtonProps, any> {
}
componentDidMount() {
// Fix for HOC usage like <FormatMessage />
const buttonText = (findDOMNode(this) as HTMLElement).innerText;
if (this.isNeedInserted() && isTwoCNChar(buttonText)) {
this.setState({
hasTwoCNChar: true,
});
}
this.fixTwoCNChar();
}
componentWillReceiveProps(nextProps: ButtonProps) {
@@ -117,6 +113,10 @@ export default class Button extends React.Component<ButtonProps, any> {
}
}
componentDidUpdate() {
this.fixTwoCNChar();
}
componentWillUnmount() {
if (this.timeout) {
clearTimeout(this.timeout);
@@ -126,6 +126,23 @@ export default class Button extends React.Component<ButtonProps, any> {
}
}
fixTwoCNChar() {
// Fix for HOC usage like <FormatMessage />
const node = (findDOMNode(this) as HTMLElement);
const buttonText = node.textContent || node.innerText;
if (this.isNeedInserted() && isTwoCNChar(buttonText)) {
if (!this.state.hasTwoCNChar) {
this.setState({
hasTwoCNChar: true,
});
}
} else if (this.state.hasTwoCNChar) {
this.setState({
hasTwoCNChar: false,
});
}
}
handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
// Add click effect
this.setState({ clicked: true });

View File

@@ -24,8 +24,8 @@ ReactDOM.render(
<Button>Default</Button>
<Button disabled>Default(disabled)</Button>
<br />
<Button>Ghost</Button>
<Button disabled>Ghost(disabled)</Button>
<Button ghost>Ghost</Button>
<Button ghost disabled>Ghost(disabled)</Button>
<br />
<Button type="dashed">Dashed</Button>
<Button type="dashed" disabled>Dashed(disabled)</Button>

View File

@@ -36,7 +36,8 @@ To get a customized button, just set `type`/`shape`/`size`/`loading`/`disabled`.
margin-right: 8px;
margin-bottom: 12px;
}
[id^=components-button-demo-] .ant-btn-group > .ant-btn {
[id^=components-button-demo-] .ant-btn-group > .ant-btn,
[id^=components-button-demo-] .ant-btn-group > span > .ant-btn {
margin-right: 0;
}
</style>

View File

@@ -156,7 +156,7 @@
}
&-background-ghost&-primary {
.button-variant-ghost(@primary-color);
.button-variant-ghost(@btn-primary-bg);
}
&-background-ghost&-danger {

View File

@@ -54,11 +54,14 @@
.button-variant-danger(@color; @background; @border) {
.button-color(@color; @background; @border);
&:hover,
&:focus {
&:hover {
.button-color(@btn-primary-color; ~`colorPalette("@{color}", 5)`; ~`colorPalette("@{color}", 5)`);
}
&:focus {
.button-color(~`colorPalette("@{color}", 5)`; #fff; ~`colorPalette("@{color}", 5)`);
}
&:active,
&.active {
.button-color(@btn-primary-color; ~`colorPalette("@{color}", 7)`; ~`colorPalette("@{color}", 7)`);
@@ -108,7 +111,7 @@
display: inline-block;
> .@{btnClassName} {
position: relative;
z-index: 1;
line-height: @btn-height-base - 2px;
&:hover,
&:focus,
@@ -125,10 +128,12 @@
// size
&-lg > .@{btnClassName} {
.button-size(@btn-height-lg; @btn-padding-lg; @btn-font-size-lg; @btn-border-radius-base);
line-height: @btn-height-lg - 2px;
}
&-sm > .@{btnClassName} {
.button-size(@btn-height-sm; @btn-padding-sm; @font-size-base; @btn-border-radius-sm);
line-height: @btn-height-sm - 2px;
> .@{iconfont-css-prefix} {
font-size: @font-size-base;
}
@@ -199,7 +204,8 @@
&:focus,
&:active,
&.active {
background: #fff;
background: @btn-default-bg;
text-decoration: none;
}
}
@@ -242,6 +248,8 @@
.@{btnClassName} + .@{btnClassName},
.@{btnClassName} + &,
span + .@{btnClassName},
.@{btnClassName} + span,
& + .@{btnClassName},
& + & {
margin-left: -1px;
@@ -251,15 +259,19 @@
border-radius: 0;
}
> .@{btnClassName}:first-child {
> .@{btnClassName}:first-child,
> span:first-child > .@{btnClassName} {
margin-left: 0;
&:not(:last-child) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
}
> .@{btnClassName}:last-child:not(:first-child) {
> .@{btnClassName}:first-child:not(:last-child),
> span:first-child:not(:last-child) > .@{btnClassName} {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
> .@{btnClassName}:last-child:not(:first-child),
> span:last-child:not(:first-child) > .@{btnClassName} {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}

View File

@@ -2,7 +2,7 @@ import * as React from 'react';
import * as moment from 'moment';
import { PREFIX_CLS } from './Constants';
import Select from '../select';
import { Group, Button } from '../radio';
import { Group, Button, RadioChangeEvent } from '../radio';
const Option = Select.Option;
export interface HeaderProps {
@@ -15,6 +15,7 @@ export interface HeaderProps {
onValueChange?: (value: moment.Moment) => void;
onTypeChange?: (type: string) => void;
value: any;
validRange ?: [moment.Moment, moment.Moment];
}
export default class Header extends React.Component<HeaderProps, any> {
@@ -27,11 +28,21 @@ export default class Header extends React.Component<HeaderProps, any> {
private calenderHeaderNode: HTMLDivElement;
getYearSelectElement(year: number) {
const { yearSelectOffset, yearSelectTotal, locale, prefixCls, fullscreen } = this.props;
const start = year - (yearSelectOffset as number);
const end = start + (yearSelectTotal as number);
const {
yearSelectOffset,
yearSelectTotal,
locale,
prefixCls,
fullscreen,
validRange,
} = this.props;
let start = year - (yearSelectOffset as number);
let end = start + (yearSelectTotal as number);
if (validRange) {
start = validRange[0].get('year');
end = validRange[1].get('year') + 1;
}
const suffix = locale.year === '年' ? '年' : '';
const options: React.ReactElement<any>[] = [];
for (let index = start; index < end; index++) {
options.push(<Option key={`${index}`}>{index + suffix}</Option>);
@@ -63,13 +74,22 @@ export default class Header extends React.Component<HeaderProps, any> {
getMonthSelectElement(month: number, months: number[]) {
const props = this.props;
const { prefixCls, fullscreen } = props;
const { prefixCls, fullscreen, validRange, value } = props;
const options: React.ReactElement<any>[] = [];
for (let index = 0; index < 12; index++) {
let start = 0;
let end = 12;
if (validRange) {
const [rangeStart, rangeEnd] = validRange;
const currentYear = value.get('year');
if (rangeEnd.get('year') === currentYear) {
end = rangeEnd.get('month') + 1;
} else {
start = rangeStart.get('month');
}
}
for (let index = start; index < end; index++) {
options.push(<Option key={`${index}`}>{months[index]}</Option>);
}
return (
<Select
size={fullscreen ? 'default' : 'small'}
@@ -85,8 +105,21 @@ export default class Header extends React.Component<HeaderProps, any> {
}
onYearChange = (year: string) => {
const newValue = this.props.value.clone();
const { value, validRange } = this.props;
const newValue = value.clone();
newValue.year(parseInt(year, 10));
// switch the month so that it remains within range when year changes
if (validRange) {
const [ start, end ] = validRange;
const newYear = newValue.get('year');
const newMonth = newValue.get('month');
if (newYear === end.get('year') && newMonth > end.get('month')) {
newValue.month(end.get('month'));
}
if (newYear === start.get('year') && newMonth < start.get('month')) {
newValue.month(start.get('month'));
}
}
const onValueChange = this.props.onValueChange;
if (onValueChange) {
@@ -103,7 +136,7 @@ export default class Header extends React.Component<HeaderProps, any> {
}
}
onTypeChange = (e: React.ChangeEvent<HTMLInputElement>) => {
onTypeChange = (e: RadioChangeEvent) => {
const onTypeChange = this.props.onTypeChange;
if (onTypeChange) {
onTypeChange(e.target.value);

View File

@@ -84,6 +84,7 @@ exports[`renders ./components/calendar/demo/basic.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="date"
/>
<span
class="ant-radio-button-inner"
@@ -102,6 +103,7 @@ exports[`renders ./components/calendar/demo/basic.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="month"
/>
<span
class="ant-radio-button-inner"
@@ -1091,6 +1093,7 @@ exports[`renders ./components/calendar/demo/card.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="date"
/>
<span
class="ant-radio-button-inner"
@@ -1109,6 +1112,7 @@ exports[`renders ./components/calendar/demo/card.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="month"
/>
<span
class="ant-radio-button-inner"
@@ -2096,6 +2100,7 @@ exports[`renders ./components/calendar/demo/notice-calendar.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="date"
/>
<span
class="ant-radio-button-inner"
@@ -2114,6 +2119,7 @@ exports[`renders ./components/calendar/demo/notice-calendar.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="month"
/>
<span
class="ant-radio-button-inner"
@@ -3511,6 +3517,7 @@ exports[`renders ./components/calendar/demo/select.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="date"
/>
<span
class="ant-radio-button-inner"
@@ -3529,6 +3536,7 @@ exports[`renders ./components/calendar/demo/select.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="month"
/>
<span
class="ant-radio-button-inner"

View File

@@ -14,4 +14,88 @@ describe('Calendar', () => {
const value = onSelect.mock.calls[0][0];
expect(Moment.isMoment(value)).toBe(true);
});
it('only Valid range should be selectable', () => {
const onSelect = jest.fn();
const validRange = [Moment('2018-02-02'), Moment('2018-02-18')];
const wrapper = mount(
<Calendar onSelect={onSelect} validRange={validRange} defaultValue={Moment('2018-02-02')} />
);
wrapper.find('[title="February 1, 2018"]').at(0).simulate('click');
wrapper.find('[title="February 2, 2018"]').at(0).simulate('click');
expect(onSelect.mock.calls.length).toBe(1);
});
it('dates other than in valid range should be disabled', () => {
const onSelect = jest.fn();
const validRange = [Moment('2018-02-02'), Moment('2018-02-18')];
const wrapper = mount(
<Calendar onSelect={onSelect} validRange={validRange} defaultValue={Moment('2018-02-02')} />
);
wrapper.find('[title="February 20, 2018"]').at(0).simulate('click');
const elem = wrapper.find('[title="February 20, 2018"]').hasClass('ant-fullcalendar-disabled-cell');
expect(elem).toEqual(true);
expect(onSelect.mock.calls.length).toBe(0);
});
it('months other than in valid range should be disabled', () => {
const onSelect = jest.fn();
const validRange = [Moment('2018-02-02'), Moment('2018-05-18')];
const wrapper = mount(
<Calendar onSelect={onSelect} validRange={validRange} defaultValue={Moment('2018-02-02')} mode="year" />
);
expect(wrapper.find('[title="Jan"]').at(0).hasClass('ant-fullcalendar-month-panel-cell-disabled')).toBe(true);
expect(wrapper.find('[title="Feb"]').at(0).hasClass('ant-fullcalendar-month-panel-cell-disabled')).toBe(false);
expect(wrapper.find('[title="Jun"]').at(0).hasClass('ant-fullcalendar-month-panel-cell-disabled')).toBe(true);
wrapper.find('[title="Jan"]').at(0).simulate('click');
wrapper.find('[title="Mar"]').at(0).simulate('click');
expect(onSelect.mock.calls.length).toBe(1);
});
it('months other than in valid range should not be shown in header', () => {
const validRange = [Moment('2017-02-02'), Moment('2018-05-18')];
const wrapper = mount(
<Calendar validRange={validRange} />
);
wrapper.find('.ant-fullcalendar-year-select').hostNodes().simulate('click');
wrapper.find('.ant-select-dropdown-menu-item').first().simulate('click');
wrapper.find('.ant-fullcalendar-month-select').hostNodes().simulate('click');
// 2 years and 11 months
expect(wrapper.find('.ant-select-dropdown-menu-item').length).toBe(13);
});
it('getDateRange should returns a disabledDate function', () => {
const validRange = [Moment('2018-02-02'), Moment('2018-05-18')];
const wrapper = mount(
<Calendar validRange={validRange} defaultValue={Moment('2018-02-02')} />
);
const instance = wrapper.instance();
const disabledDate = instance.getDateRange(validRange);
expect(disabledDate(Moment('2018-06-02'))).toBe(true);
expect(disabledDate(Moment('2018-04-02'))).toBe(false);
});
it('Calendar should change mode by prop', () => {
const monthMode = 'month';
const yearMode = 'year';
const wrapper = mount(
<Calendar />
);
expect(wrapper.state().mode).toEqual(monthMode);
wrapper.setProps({ mode: 'year' });
expect(wrapper.state().mode).toEqual(yearMode);
});
it('Calendar should switch mode', () => {
const monthMode = 'month';
const yearMode = 'year';
const onPanelChangeStub = jest.fn();
const wrapper = mount(
<Calendar mode={yearMode} onPanelChange={onPanelChangeStub} />
);
expect(wrapper.state().mode).toEqual(yearMode);
wrapper.instance().setType('date');
expect(wrapper.state().mode).toEqual(monthMode);
expect(onPanelChangeStub).toHaveBeenCalledTimes(1);
});
});

View File

@@ -40,6 +40,7 @@ When data is in the form of dates, such as schedules, timetables, prices calenda
| mode | The display mode of the calendar | `month` \| `year` | `month` |
| monthCellRender | Customize the display of the month cell, the returned content will be appended to the cell | function(date: moment): ReactNode | - |
| monthFullCellRender | Customize the display of the month cell, the returned content will override the cell | function(date: moment): ReactNode | - |
| validRange | to set valid range | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | - |
| value | The current selected date | [moment](http://momentjs.com/) | current date |
| onPanelChange | Callback for when panel changes | function(date: moment, mode: string) | - |
| onSelect | Callback for when a date is selected | function(date: moment | - |

View File

@@ -5,7 +5,7 @@ import FullCalendar from 'rc-calendar/lib/FullCalendar';
import LocaleReceiver from '../locale-provider/LocaleReceiver';
import { PREFIX_CLS } from './Constants';
import Header from './Header';
import callMoment from '../_util/callMoment';
import interopDefault from '../_util/interopDefault';
import enUS from './locale/en_US';
export { HeaderProps } from './Header';
@@ -37,6 +37,7 @@ export interface CalendarProps {
onPanelChange?: (date?: moment.Moment, mode?: CalendarMode) => void;
onSelect?: (date?: moment.Moment) => void;
disabledDate?: (current: moment.Moment) => boolean;
validRange ?: [moment.Moment, moment.Moment];
}
export interface CalendarState {
@@ -72,8 +73,8 @@ export default class Calendar extends React.Component<CalendarProps, CalendarSta
constructor(props: CalendarProps) {
super(props);
const value = props.value || props.defaultValue || callMoment(moment);
if (!moment.isMoment(value)) {
const value = props.value || props.defaultValue || interopDefault(moment)();
if (!interopDefault(moment).isMoment(value)) {
throw new Error(
'The value/defaultValue of Calendar must be a moment object after `antd@2.0`, ' +
'see: https://u.ant.design/calendar-value',
@@ -91,6 +92,11 @@ export default class Calendar extends React.Component<CalendarProps, CalendarSta
value: nextProps.value!,
});
}
if ('mode' in nextProps && nextProps.mode !== this.props.mode) {
this.setState({
mode: nextProps.mode!,
});
}
}
monthCellRender = (value: moment.Moment) => {
@@ -161,6 +167,21 @@ export default class Calendar extends React.Component<CalendarProps, CalendarSta
this.setValue(value, 'select');
}
getDateRange = (
validRange: [moment.Moment, moment.Moment],
disabledDate?: (current: moment.Moment) => boolean,
) => (current: moment.Moment) => {
if (!current) {
return false;
}
const [ startDate, endDate ] = validRange;
const inRange = !current.isBetween(startDate, endDate, 'days', '[]');
if (disabledDate) {
return (disabledDate(current) || inRange);
}
return inRange;
}
renderCalendar = (locale: any, localeCode: string) => {
const { state, props } = this;
const { value, mode } = state;
@@ -178,6 +199,12 @@ export default class Calendar extends React.Component<CalendarProps, CalendarSta
const monthCellRender = monthFullCellRender || this.monthCellRender;
const dateCellRender = dateFullCellRender || this.dateCellRender;
let disabledDate = props.disabledDate;
if (props.validRange) {
disabledDate = this.getDateRange(props.validRange, disabledDate);
}
return (
<div className={cls} style={style}>
<Header
@@ -188,9 +215,11 @@ export default class Calendar extends React.Component<CalendarProps, CalendarSta
prefixCls={prefixCls}
onTypeChange={this.onHeaderTypeChange}
onValueChange={this.onHeaderValueChange}
validRange={props.validRange}
/>
<FullCalendar
{...props}
disabledDate={disabledDate}
Select={noop}
locale={locale.lang}
type={type}

View File

@@ -41,6 +41,7 @@ title: Calendar
| mode | 初始模式,`month/year` | string | month |
| monthCellRender | 自定义渲染月单元格,返回内容会被追加到单元格 | function(date: moment): ReactNode | 无 |
| monthFullCellRender | 自定义渲染月单元格,返回内容覆盖单元格 | function(date: moment): ReactNode | 无 |
| validRange | 设置可以显示的日期 | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | 无 |
| value | 展示日期 | [moment](http://momentjs.com/) | 当前日期 |
| onPanelChange | 日期面板变化回调 | function(date: moment, mode: string) | 无 |
| onSelect | 点击选择日期回调 | function(date: moment | 无 |

View File

@@ -0,0 +1,2 @@
import ku_IQ from '../../date-picker/locale/ku_IQ';
export default ku_IQ;

View File

@@ -0,0 +1,2 @@
import sl_SI from '../../date-picker/locale/sl_SI';
export default sl_SI;

View File

@@ -30,17 +30,15 @@ exports[`renders ./components/card/demo/basic.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
</div>
`;
@@ -69,17 +67,15 @@ exports[`renders ./components/card/demo/border-less.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
</div>
</div>
@@ -101,23 +97,21 @@ exports[`renders ./components/card/demo/flexible-content.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<div
class="ant-card-meta"
>
<div
class="ant-card-meta"
class="ant-card-meta-detail"
>
<div
class="ant-card-meta-detail"
class="ant-card-meta-title"
>
<div
class="ant-card-meta-title"
>
Europe Street beat
</div>
<div
class="ant-card-meta-description"
>
www.instagram.com
</div>
Europe Street beat
</div>
<div
class="ant-card-meta-description"
>
www.instagram.com
</div>
</div>
</div>
@@ -145,49 +139,47 @@ exports[`renders ./components/card/demo/grid-card.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
<div
class="ant-card-grid"
style="width:25%;text-align:center"
>
Content
</div>
</div>
</div>
@@ -224,9 +216,7 @@ exports[`renders ./components/card/demo/in-column.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
Card content
</div>
Card content
</div>
</div>
</div>
@@ -253,9 +243,7 @@ exports[`renders ./components/card/demo/in-column.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
Card content
</div>
Card content
</div>
</div>
</div>
@@ -282,9 +270,7 @@ exports[`renders ./components/card/demo/in-column.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
Card content
</div>
Card content
</div>
</div>
</div>
@@ -312,158 +298,248 @@ exports[`renders ./components/card/demo/inner.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p
style="font-size:14px;color:rgba(0, 0, 0, 0.85);margin-bottom:16px;font-weight:500"
>
Group title
</p>
<p
style="font-size:14px;color:rgba(0, 0, 0, 0.85);margin-bottom:16px;font-weight:500"
>
Group title
</p>
<div
class="ant-card ant-card-bordered ant-card-type-inner"
>
<div
class="ant-card ant-card-bordered ant-card-type-inner"
class="ant-card-head"
>
<div
class="ant-card-head"
class="ant-card-head-wrapper"
>
<div
class="ant-card-head-wrapper"
class="ant-card-head-title"
>
<div
class="ant-card-head-title"
>
Inner Card title
</div>
<div
class="ant-card-extra"
>
<a
href="#"
>
More
</a>
</div>
Inner Card title
</div>
</div>
<div
class="ant-card-body"
>
<div>
Inner Card content
<div
class="ant-card-extra"
>
<a
href="#"
>
More
</a>
</div>
</div>
</div>
<div
class="ant-card ant-card-bordered ant-card-type-inner"
style="margin-top:16px"
class="ant-card-body"
>
Inner Card content
</div>
</div>
<div
class="ant-card ant-card-bordered ant-card-type-inner"
style="margin-top:16px"
>
<div
class="ant-card-head"
>
<div
class="ant-card-head"
class="ant-card-head-wrapper"
>
<div
class="ant-card-head-wrapper"
class="ant-card-head-title"
>
<div
class="ant-card-head-title"
Inner Card title
</div>
<div
class="ant-card-extra"
>
<a
href="#"
>
Inner Card title
</div>
<div
class="ant-card-extra"
>
<a
href="#"
>
More
</a>
</div>
</div>
</div>
<div
class="ant-card-body"
>
<div>
Inner Card content
More
</a>
</div>
</div>
</div>
<div
class="ant-card-body"
>
Inner Card content
</div>
</div>
</div>
</div>
`;
exports[`renders ./components/card/demo/loading.md correctly 1`] = `
<div
class="ant-card ant-card-loading ant-card-bordered"
style="width:34%"
>
<div>
<div
class="ant-card-head"
class="ant-card ant-card-loading ant-card-bordered"
>
<div
class="ant-card-head-wrapper"
class="ant-card-head"
>
<div
class="ant-card-head-title"
class="ant-card-head-wrapper"
>
Card title
<div
class="ant-card-head-title"
>
Card title
</div>
</div>
</div>
<div
class="ant-card-body"
>
<div
class="ant-card-loading-content"
>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-22"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-8"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-15"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-6"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-18"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-13"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-9"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-4"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-3"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-16"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
<div
class="ant-row"
style="margin-left:-4px;margin-right:-4px"
>
<div
class="ant-col-8"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-6"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
<div
class="ant-col-8"
style="padding-left:4px;padding-right:4px"
>
<div
class="ant-card-loading-block"
/>
</div>
</div>
</div>
</div>
</div>
<div
class="ant-card-body"
<button
class="ant-btn"
style="margin-top:16px"
type="button"
>
<div
class="ant-card-loading-content"
>
<p
class="ant-card-loading-block"
style="width:94%"
/>
<p>
<span
class="ant-card-loading-block"
style="width:28%"
/>
<span
class="ant-card-loading-block"
style="width:62%"
/>
</p>
<p>
<span
class="ant-card-loading-block"
style="width:22%"
/>
<span
class="ant-card-loading-block"
style="width:66%"
/>
</p>
<p>
<span
class="ant-card-loading-block"
style="width:56%"
/>
<span
class="ant-card-loading-block"
style="width:39%"
/>
</p>
<p>
<span
class="ant-card-loading-block"
style="width:21%"
/>
<span
class="ant-card-loading-block"
style="width:15%"
/>
<span
class="ant-card-loading-block"
style="width:40%"
/>
</p>
</div>
</div>
<span>
Toggle loading
</span>
</button>
</div>
`;
@@ -483,34 +559,32 @@ exports[`renders ./components/card/demo/meta.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<div
class="ant-card-meta"
>
<div
class="ant-card-meta"
class="ant-card-meta-avatar"
>
<span
class="ant-avatar ant-avatar-circle ant-avatar-image"
>
<img
src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
/>
</span>
</div>
<div
class="ant-card-meta-detail"
>
<div
class="ant-card-meta-avatar"
class="ant-card-meta-title"
>
<span
class="ant-avatar ant-avatar-circle ant-avatar-image"
>
<img
src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
/>
</span>
Card title
</div>
<div
class="ant-card-meta-detail"
class="ant-card-meta-description"
>
<div
class="ant-card-meta-title"
>
Card title
</div>
<div
class="ant-card-meta-description"
>
This is the description
</div>
This is the description
</div>
</div>
</div>
@@ -557,17 +631,15 @@ exports[`renders ./components/card/demo/simple.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
<p>
Card content
</p>
<p>
Card content
</p>
<p>
Card content
</p>
</div>
</div>
`;
@@ -640,8 +712,8 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
/>
<div
aria-disabled="false"
aria-selected="true"
class="ant-tabs-tab-active ant-tabs-tab"
aria-selected="false"
class=" ant-tabs-tab"
role="tab"
>
tab1
@@ -661,11 +733,11 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
</div>
<div
class="ant-tabs-content ant-tabs-content-animated"
style="margin-left:0%"
style="display:none"
>
<div
aria-hidden="false"
class="ant-tabs-tabpane ant-tabs-tabpane-active"
aria-hidden="true"
class="ant-tabs-tabpane ant-tabs-tabpane-inactive"
role="tabpanel"
/>
<div
@@ -679,11 +751,9 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p>
content1
</p>
</div>
<p>
content1
</p>
</div>
</div>
<br />
@@ -739,16 +809,16 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
/>
<div
aria-disabled="false"
aria-selected="true"
class="ant-tabs-tab-active ant-tabs-tab"
aria-selected="false"
class=" ant-tabs-tab"
role="tab"
>
article
</div>
<div
aria-disabled="false"
aria-selected="false"
class=" ant-tabs-tab"
aria-selected="true"
class="ant-tabs-tab-active ant-tabs-tab"
role="tab"
>
app
@@ -768,18 +838,18 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
</div>
<div
class="ant-tabs-content ant-tabs-content-animated"
style="margin-left:0%"
style="margin-left:-100%"
>
<div
aria-hidden="false"
class="ant-tabs-tabpane ant-tabs-tabpane-active"
role="tabpanel"
/>
<div
aria-hidden="true"
class="ant-tabs-tabpane ant-tabs-tabpane-inactive"
role="tabpanel"
/>
<div
aria-hidden="false"
class="ant-tabs-tabpane ant-tabs-tabpane-active"
role="tabpanel"
/>
<div
aria-hidden="true"
class="ant-tabs-tabpane ant-tabs-tabpane-inactive"
@@ -791,11 +861,9 @@ exports[`renders ./components/card/demo/tabs.md correctly 1`] = `
<div
class="ant-card-body"
>
<div>
<p>
article content
</p>
</div>
<p>
app content
</p>
</div>
</div>
</div>

View File

@@ -14,11 +14,30 @@ title:
Shows a loading indicator while the contents of the card is being fetched.
````jsx
import { Card } from 'antd';
import { Card, Button } from 'antd';
class LoadingCard extends React.Component {
state = {
loading: true,
}
handleClick = () => {
this.setState({ loading: !this.state.loading });
}
render() {
return (
<div>
<Card loading={this.state.loading} title="Card title">
Whatever content
</Card>
<Button onClick={this.handleClick} style={{ marginTop: 16 }}>Toggle loading</Button>
</div>
);
}
}
ReactDOM.render(
<Card loading title="Card title" style={{ width: '34%' }}>
Whatever content
</Card>
<LoadingCard />
, mountNode);
````

View File

@@ -49,7 +49,7 @@ const contentListNoTitle = {
class TabsCard extends React.Component {
state = {
key: 'tab1',
noTitleKey: 'article',
noTitleKey: 'app',
}
onTabChange = (key, type) => {
console.log(key, type);
@@ -71,6 +71,7 @@ class TabsCard extends React.Component {
<Card
style={{ width: '100%' }}
tabList={tabListNoTitle}
activeTabKey={this.state.noTitleKey}
onTabChange={(key) => { this.onTabChange(key, 'noTitleKey'); }}
>
{contentListNoTitle[this.state.noTitleKey]}

View File

@@ -29,6 +29,8 @@ A card can be used to display content related to a single subject. The content c
| hoverable | Lift up when hovering card | boolean | false |
| loading | Shows a loading indicator while the contents of the card are being fetched | boolean | false |
| tabList | List of TabPane's head. | Array&lt;{key: string, tab: ReactNode}> | - |
| activeTabKey | Current TabPane's key | string | - |
| defaultActiveTabKey | Initial active TabPane's key, if `activeTabKey` is not set. | string | - |
| title | Card title | string\|ReactNode | - |
| type | Card style type, can be set to `inner` or not set | string | - |
| onTabChange | Callback when tab is switched | (key) => void | - |

View File

@@ -5,8 +5,11 @@ import omit from 'omit.js';
import Grid from './Grid';
import Meta from './Meta';
import Tabs from '../tabs';
import Row from '../row';
import Col from '../col';
import { throttleByAnimationFrameDecorator } from '../_util/throttleByAnimationFrame';
import warning from '../_util/warning';
import { Omit } from '../_util/type';
export { CardGridProps } from './Grid';
export { CardMetaProps } from './Meta';
@@ -18,7 +21,7 @@ export interface CardTabListType {
tab: React.ReactNode;
}
export interface CardProps {
export interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
prefixCls?: string;
title?: React.ReactNode;
extra?: React.ReactNode;
@@ -36,16 +39,24 @@ export interface CardProps {
actions?: Array<React.ReactNode>;
tabList?: CardTabListType[];
onTabChange?: (key: string) => void;
activeTabKey?: string;
defaultActiveTabKey?: string;
}
export default class Card extends React.Component<CardProps, {}> {
export interface CardState {
widerPadding: boolean;
}
export default class Card extends React.Component<CardProps, CardState> {
static Grid: typeof Grid = Grid;
static Meta: typeof Meta = Meta;
resizeEvent: any;
updateWiderPaddingCalled: boolean;
state = {
widerPadding: false,
};
private resizeEvent: any;
private updateWiderPaddingCalled: boolean = false;
private container: HTMLDivElement;
componentDidMount() {
this.updateWiderPadding();
@@ -54,9 +65,9 @@ export default class Card extends React.Component<CardProps, {}> {
if ('noHovering' in this.props) {
warning(
!this.props.noHovering,
'`noHovering` of Card is deperated, you can remove it safely or use `hoverable` instead.',
'`noHovering` of Card is deprecated, you can remove it safely or use `hoverable` instead.',
);
warning(!!this.props.noHovering, '`noHovering={false}` of Card is deperated, use `hoverable` instead.');
warning(!!this.props.noHovering, '`noHovering={false}` of Card is deprecated, use `hoverable` instead.');
}
}
componentWillUnmount() {
@@ -70,14 +81,14 @@ export default class Card extends React.Component<CardProps, {}> {
if (!this.container) {
return;
}
// 936 is a magic card width pixer number indicated by designer
const WIDTH_BOUDARY_PX = 936;
if (this.container.offsetWidth >= WIDTH_BOUDARY_PX && !this.state.widerPadding) {
// 936 is a magic card width pixel number indicated by designer
const WIDTH_BOUNDARY_PX = 936;
if (this.container.offsetWidth >= WIDTH_BOUNDARY_PX && !this.state.widerPadding) {
this.setState({ widerPadding: true }, () => {
this.updateWiderPaddingCalled = true; // first render without css transition
});
}
if (this.container.offsetWidth < WIDTH_BOUDARY_PX && this.state.widerPadding) {
if (this.container.offsetWidth < WIDTH_BOUNDARY_PX && this.state.widerPadding) {
this.setState({ widerPadding: false }, () => {
this.updateWiderPaddingCalled = true; // first render without css transition
});
@@ -123,7 +134,7 @@ export default class Card extends React.Component<CardProps, {}> {
render() {
const {
prefixCls = 'ant-card', className, extra, bodyStyle, noHovering, hoverable, title, loading,
bordered = true, type, cover, actions, tabList, children, ...others,
bordered = true, type, cover, actions, tabList, children, activeTabKey, defaultActiveTabKey, ...others,
} = this.props;
const classString = classNames(prefixCls, className, {
@@ -139,30 +150,75 @@ export default class Card extends React.Component<CardProps, {}> {
const loadingBlock = (
<div className={`${prefixCls}-loading-content`}>
<p className={`${prefixCls}-loading-block`} style={{ width: '94%' }} />
<p>
<span className={`${prefixCls}-loading-block`} style={{ width: '28%' }} />
<span className={`${prefixCls}-loading-block`} style={{ width: '62%' }} />
</p>
<p>
<span className={`${prefixCls}-loading-block`} style={{ width: '22%' }} />
<span className={`${prefixCls}-loading-block`} style={{ width: '66%' }} />
</p>
<p>
<span className={`${prefixCls}-loading-block`} style={{ width: '56%' }} />
<span className={`${prefixCls}-loading-block`} style={{ width: '39%' }} />
</p>
<p>
<span className={`${prefixCls}-loading-block`} style={{ width: '21%' }} />
<span className={`${prefixCls}-loading-block`} style={{ width: '15%' }} />
<span className={`${prefixCls}-loading-block`} style={{ width: '40%' }} />
</p>
<Row gutter={8}>
<Col span={22}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
<Row gutter={8}>
<Col span={8}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={15}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
<Row gutter={8}>
<Col span={6}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={18}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
<Row gutter={8}>
<Col span={13}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={9}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
<Row gutter={8}>
<Col span={4}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={3}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={16}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
<Row gutter={8}>
<Col span={8}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={6}>
<div className={`${prefixCls}-loading-block`} />
</Col>
<Col span={8}>
<div className={`${prefixCls}-loading-block`} />
</Col>
</Row>
</div>
);
const hasActiveTabKey = activeTabKey !== undefined;
const extraProps = {
[hasActiveTabKey ? 'activeKey' : 'defaultActiveKey']: hasActiveTabKey
? activeTabKey
: defaultActiveTabKey,
};
let head;
const tabs = tabList && tabList.length ? (
<Tabs className={`${prefixCls}-head-tabs`} size="large" onChange={this.onTabChange}>
<Tabs
{...extraProps}
className={`${prefixCls}-head-tabs`}
size="large"
onChange={this.onTabChange}
>
{tabList.map(item => <Tabs.TabPane tab={item.tab} key={item.key} />)}
</Tabs>
) : null;
@@ -180,7 +236,7 @@ export default class Card extends React.Component<CardProps, {}> {
const coverDom = cover ? <div className={`${prefixCls}-cover`}>{cover}</div> : null;
const body = (
<div className={`${prefixCls}-body`} style={bodyStyle}>
{loading ? loadingBlock : <div>{children}</div>}
{loading ? loadingBlock : children}
</div>
);
const actionDom = actions && actions.length ?
@@ -192,7 +248,7 @@ export default class Card extends React.Component<CardProps, {}> {
<div {...divProps} className={classString} ref={this.saveRef}>
{head}
{coverDom}
{children ? body : null}
{body}
{actionDom}
</div>
);

View File

@@ -30,6 +30,8 @@ cols: 1
| hoverable | 鼠标移过时可浮起 | boolean | false |
| loading | 当卡片内容还在加载中时,可以用 loading 展示一个占位 | boolean | false |
| tabList | 页签标题列表 | Array&lt;{key: string, tab: ReactNode}> | - |
| activeTabKey | 当前激活页签的 key | string | - |
| defaultActiveTabKey | 初始化选中页签的 key如果没有设置 activeTabKey | string | 第一个页签 |
| title | 卡片标题 | string\|ReactNode | - |
| type | 卡片类型,可设置为 `inner` 或 不设置 | string | - |
| onTabChange | 页签切换的回调 | (key) => void | - |

View File

@@ -72,7 +72,7 @@
.clearfix;
}
&-contain-grid &-body {
&-contain-grid:not(&-loading) {
margin: -1px 0 0 -1px;
padding: 0;
}
@@ -135,10 +135,16 @@
& > .anticon {
font-size: 16px;
line-height: 22px;
display: block;
width: 100%;
}
a {
color: @text-color-secondary;
line-height: 22px;
display: inline-block;
width: 100%;
&:hover {
color: @primary-color;
@@ -165,10 +171,6 @@
transition: padding .3s;
}
&-padding-transition &-extra {
transition: right .3s;
}
&-type-inner &-head {
padding: 0 @card-padding-base;
background: @background-color-light;
@@ -219,20 +221,17 @@
&-loading &-body {
user-select: none;
padding: 0;
}
&-loading-content {
padding: @card-padding-base;
p {
margin: 0;
}
}
&-loading-block {
display: inline-block;
margin: 5px 2% 0 0;
height: 14px;
margin: 4px 0;
border-radius: @border-radius-sm;
background: linear-gradient(90deg, rgba(207, 216, 220, .2), rgba(207, 216, 220, .4), rgba(207, 216, 220, .2));
animation: card-loading 1.4s ease infinite;

View File

@@ -5,72 +5,213 @@ exports[`renders ./components/carousel/demo/autoplay.md correctly 1`] = `
class="ant-carousel"
>
<div
class="slick-initialized slick-slider"
class="slick-slider slick-initialized"
dir="ltr"
>
<div
class="slick-list"
>
<div
class="slick-track"
style="width:900%;left:-100%"
>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="-1"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-active slick-cloned"
aria-hidden="false"
class="slick-slide slick-active slick-current"
data-index="0"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="1"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
2
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="2"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
3
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="3"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="4"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="5"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="6"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="7"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
</div>
</div>
<ul
class="slick-dots"
style="display:block"
>
<li
class="slick-active"
>
<button>
1
</button>
</li>
<li
class=""
>
<button>
2
</button>
</li>
<li
class=""
>
<button>
3
</button>
</li>
<li
class=""
>
<button>
4
</button>
</li>
</ul>
</div>
</div>
`;
@@ -80,72 +221,213 @@ exports[`renders ./components/carousel/demo/basic.md correctly 1`] = `
class="ant-carousel"
>
<div
class="slick-initialized slick-slider"
class="slick-slider slick-initialized"
dir="ltr"
>
<div
class="slick-list"
>
<div
class="slick-track"
style="width:900%;left:-100%"
>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="-1"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-active slick-cloned"
aria-hidden="false"
class="slick-slide slick-active slick-current"
data-index="0"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="1"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
2
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="2"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
3
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="3"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="4"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="5"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="6"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="7"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
</div>
</div>
<ul
class="slick-dots"
style="display:block"
>
<li
class="slick-active"
>
<button>
1
</button>
</li>
<li
class=""
>
<button>
2
</button>
</li>
<li
class=""
>
<button>
3
</button>
</li>
<li
class=""
>
<button>
4
</button>
</li>
</ul>
</div>
</div>
`;
@@ -155,56 +437,123 @@ exports[`renders ./components/carousel/demo/fade.md correctly 1`] = `
class="ant-carousel"
>
<div
class="slick-initialized slick-slider"
class="slick-slider slick-initialized"
dir="ltr"
>
<div
class="slick-list"
>
<div
class="slick-track"
style="width:900%;left:-100%"
>
<div
class="slick-slide slick-active slick-cloned"
aria-hidden="false"
class="slick-slide slick-active slick-current"
data-index="0"
style="outline:none;position:relative;left:0;opacity:1;transition:opacity 500ms ease;-webkit-transition:opacity 500ms ease"
style="outline:none;width:11.11111111111111%;position:relative;left:0;opacity:1;transition:opacity 500ms ease, visibility 500ms ease;-webkit-transition:opacity 500ms ease, visibility 500ms ease"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="1"
style="outline:none;position:relative;left:0;opacity:0;transition:opacity 500ms ease;-webkit-transition:opacity 500ms ease"
style="outline:none;width:11.11111111111111%;position:relative;left:-11px;opacity:0;transition:opacity 500ms ease, visibility 500ms ease;-webkit-transition:opacity 500ms ease, visibility 500ms ease"
tabindex="-1"
>
<h3>
2
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="2"
style="outline:none;position:relative;left:0;opacity:0;transition:opacity 500ms ease;-webkit-transition:opacity 500ms ease"
style="outline:none;width:11.11111111111111%;position:relative;left:-22px;opacity:0;transition:opacity 500ms ease, visibility 500ms ease;-webkit-transition:opacity 500ms ease, visibility 500ms ease"
tabindex="-1"
>
<h3>
3
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="3"
style="outline:none;position:relative;left:0;opacity:0;transition:opacity 500ms ease;-webkit-transition:opacity 500ms ease"
style="outline:none;width:11.11111111111111%;position:relative;left:-33px;opacity:0;transition:opacity 500ms ease, visibility 500ms ease;-webkit-transition:opacity 500ms ease, visibility 500ms ease"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
</div>
</div>
<ul
class="slick-dots"
style="display:block"
>
<li
class="slick-active"
>
<button>
1
</button>
</li>
<li
class=""
>
<button>
2
</button>
</li>
<li
class=""
>
<button>
3
</button>
</li>
<li
class=""
>
<button>
4
</button>
</li>
</ul>
</div>
</div>
`;
@@ -214,72 +563,213 @@ exports[`renders ./components/carousel/demo/vertical.md correctly 1`] = `
class="ant-carousel ant-carousel-vertical"
>
<div
class="slick-initialized slick-slider slick-vertical"
class="slick-slider slick-vertical slick-initialized"
dir="ltr"
>
<div
class="slick-list"
>
<div
class="slick-track"
style="width:900%;left:-100%"
>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="-1"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-active slick-cloned"
aria-hidden="false"
class="slick-slide slick-active slick-current"
data-index="0"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="1"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
2
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="2"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
3
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
class="slick-slide slick-cloned"
aria-hidden="true"
class="slick-slide"
data-index="3"
style="outline:none"
style="outline:none;width:11.11111111111111%"
tabindex="-1"
>
<h3>
4
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="4"
style="width:11.11111111111111%"
tabindex="-1"
>
<h3>
1
</h3>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
1
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="5"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
2
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="6"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
3
</h3>
</div>
</div>
</div>
<div
aria-hidden="true"
class="slick-slide slick-cloned"
data-index="7"
style="width:11.11111111111111%"
tabindex="-1"
>
<div>
<div
style="width:100%;display:inline-block"
tabindex="-1"
>
<h3>
4
</h3>
</div>
</div>
</div>
</div>
</div>
<ul
class="slick-dots"
style="display:block"
>
<li
class="slick-active"
>
<button>
1
</button>
</li>
<li
class=""
>
<button>
2
</button>
</li>
<li
class=""
>
<button>
3
</button>
</li>
<li
class=""
>
<button>
4
</button>
</li>
</ul>
</div>
</div>
`;

View File

@@ -1,5 +1,5 @@
import * as React from 'react';
import debounce from 'lodash.debounce';
import debounce from 'lodash/debounce';
// matchMedia polyfill for
// https://github.com/WickyNilliams/enquire.js/issues/82

View File

@@ -214,3 +214,29 @@ exports[`Cascader popup correctly with defaultValue 1`] = `
</div>
</div>
`;
exports[`Cascader support controlled mode 1`] = `
<span
class="ant-cascader-picker"
tabindex="0"
>
<span
class="ant-cascader-picker-label"
>
Zhejiang / Hangzhou / West Lake
</span>
<input
autocomplete="off"
class="ant-input ant-cascader-input "
readonly=""
type="text"
value=""
/>
<i
class="anticon anticon-cross-circle ant-cascader-picker-clear"
/>
<i
class="anticon anticon-down ant-cascader-picker-arrow"
/>
</span>
`;

View File

@@ -46,6 +46,16 @@ describe('Cascader', () => {
expect(render(wrapper.find('Trigger').instance().getComponent())).toMatchSnapshot();
});
it('support controlled mode', () => {
const wrapper = mount(
<Cascader options={options} />
);
wrapper.setProps({
value: ['zhejiang', 'hangzhou', 'xihu'],
});
expect(wrapper.render()).toMatchSnapshot();
});
it('popup correctly with defaultValue', () => {
const wrapper = mount(
<Cascader options={options} defaultValue={['zhejiang', 'hangzhou']} />

View File

@@ -52,12 +52,16 @@ function onChange(value, selectedOptions) {
console.log(value, selectedOptions);
}
function filter(inputValue, path) {
return (path.some(option => (option.label).toLowerCase().indexOf(inputValue.toLowerCase()) > -1));
}
ReactDOM.render(
<Cascader
options={options}
onChange={onChange}
placeholder="Please select"
showSearch
showSearch={{ filter }}
/>,
mountNode
);

View File

@@ -5,26 +5,39 @@ import RcCheckbox from 'rc-checkbox';
import shallowEqual from 'shallowequal';
import CheckboxGroup, { CheckboxGroupContext } from './Group';
export interface AbstractCheckboxProps {
export interface AbstractCheckboxProps<T> {
prefixCls?: string;
className?: string;
defaultChecked?: boolean;
checked?: boolean;
style?: React.CSSProperties;
disabled?: boolean;
onChange?: React.ChangeEventHandler<HTMLInputElement>;
onChange?: (e: T) => void;
onMouseEnter?: React.MouseEventHandler<any>;
onMouseLeave?: React.MouseEventHandler<any>;
onKeyPress?: React.KeyboardEventHandler<any>;
onKeyDown?: React.KeyboardEventHandler<any>;
value?: any;
tabIndex?: number;
name?: string;
children?: React.ReactNode;
}
export interface CheckboxProps extends AbstractCheckboxProps {
export interface CheckboxProps extends AbstractCheckboxProps<CheckboxChangeEvent> {
indeterminate?: boolean;
}
export interface CheckboxChangeEventTarget extends CheckboxProps {
checked: boolean;
}
export interface CheckboxChangeEvent {
target: CheckboxChangeEventTarget;
stopPropagation: () => void;
preventDefault: () => void;
nativeEvent: MouseEvent;
}
export default class Checkbox extends React.Component<CheckboxProps, {}> {
static Group: typeof CheckboxGroup;
static defaultProps = {

View File

@@ -41,7 +41,7 @@ export interface CheckboxGroupContext {
export default class CheckboxGroup extends React.Component<CheckboxGroupProps, CheckboxGroupState> {
static defaultProps = {
options: [],
prefixCls: 'ant-checkbox-group',
prefixCls: 'ant-checkbox',
};
static propTypes = {
@@ -115,23 +115,25 @@ export default class CheckboxGroup extends React.Component<CheckboxGroupProps, C
render() {
const { props, state } = this;
const { prefixCls, className, style, options } = props;
const groupPrefixCls = `${prefixCls}-group`;
let children = props.children;
if (options && options.length > 0) {
children = this.getOptions().map(option => (
<Checkbox
prefixCls={prefixCls}
key={option.value}
disabled={'disabled' in option ? option.disabled : props.disabled}
value={option.value}
checked={state.value.indexOf(option.value) !== -1}
onChange={() => this.toggleOption(option)}
className={`${prefixCls}-item`}
className={`${groupPrefixCls}-item`}
>
{option.label}
</Checkbox>
));
}
const classString = classNames(prefixCls, className);
const classString = classNames(groupPrefixCls, className);
return (
<div className={classString} style={style}>
{children}

View File

@@ -59,6 +59,7 @@ exports[`renders ./components/checkbox/demo/check-all.md correctly 1`] = `
checked=""
class="ant-checkbox-input"
type="checkbox"
value="Apple"
/>
<span
class="ant-checkbox-inner"
@@ -77,6 +78,7 @@ exports[`renders ./components/checkbox/demo/check-all.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="Pear"
/>
<span
class="ant-checkbox-inner"
@@ -96,6 +98,7 @@ exports[`renders ./components/checkbox/demo/check-all.md correctly 1`] = `
checked=""
class="ant-checkbox-input"
type="checkbox"
value="Orange"
/>
<span
class="ant-checkbox-inner"
@@ -210,6 +213,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
checked=""
class="ant-checkbox-input"
type="checkbox"
value="Apple"
/>
<span
class="ant-checkbox-inner"
@@ -228,6 +232,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="Pear"
/>
<span
class="ant-checkbox-inner"
@@ -246,6 +251,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="Orange"
/>
<span
class="ant-checkbox-inner"
@@ -270,6 +276,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="Apple"
/>
<span
class="ant-checkbox-inner"
@@ -289,6 +296,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
checked=""
class="ant-checkbox-input"
type="checkbox"
value="Pear"
/>
<span
class="ant-checkbox-inner"
@@ -307,6 +315,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="Orange"
/>
<span
class="ant-checkbox-inner"
@@ -333,6 +342,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
class="ant-checkbox-input"
disabled=""
type="checkbox"
value="Apple"
/>
<span
class="ant-checkbox-inner"
@@ -352,6 +362,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
class="ant-checkbox-input"
disabled=""
type="checkbox"
value="Pear"
/>
<span
class="ant-checkbox-inner"
@@ -371,6 +382,7 @@ exports[`renders ./components/checkbox/demo/group.md correctly 1`] = `
class="ant-checkbox-input"
disabled=""
type="checkbox"
value="Orange"
/>
<span
class="ant-checkbox-inner"
@@ -404,6 +416,7 @@ exports[`renders ./components/checkbox/demo/layout.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="A"
/>
<span
class="ant-checkbox-inner"
@@ -426,6 +439,7 @@ exports[`renders ./components/checkbox/demo/layout.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="B"
/>
<span
class="ant-checkbox-inner"
@@ -448,6 +462,7 @@ exports[`renders ./components/checkbox/demo/layout.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="C"
/>
<span
class="ant-checkbox-inner"
@@ -470,6 +485,7 @@ exports[`renders ./components/checkbox/demo/layout.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="D"
/>
<span
class="ant-checkbox-inner"
@@ -492,6 +508,7 @@ exports[`renders ./components/checkbox/demo/layout.md correctly 1`] = `
<input
class="ant-checkbox-input"
type="checkbox"
value="E"
/>
<span
class="ant-checkbox-inner"

View File

@@ -0,0 +1,46 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`CheckboxGroup passes prefixCls down to checkbox 1`] = `
<div
class="my-checkbox-group"
>
<label
class="my-checkbox-group-item my-checkbox-wrapper"
>
<span
class="my-checkbox"
>
<input
class="my-checkbox-input"
type="checkbox"
value="Apple"
/>
<span
class="my-checkbox-inner"
/>
</span>
<span>
Apple
</span>
</label>
<label
class="my-checkbox-group-item my-checkbox-wrapper"
>
<span
class="my-checkbox"
>
<input
class="my-checkbox-input"
type="checkbox"
value="Orange"
/>
<span
class="my-checkbox-inner"
/>
</span>
<span>
Orange
</span>
</label>
</div>
`;

View File

@@ -1,5 +1,5 @@
import React from 'react';
import { mount } from 'enzyme';
import { mount, render } from 'enzyme';
import Checkbox from '../index';
describe('CheckboxGroup', () => {
@@ -51,4 +51,17 @@ describe('CheckboxGroup', () => {
groupWrapper.find('.ant-checkbox-input').at(1).simulate('change');
expect(onChangeGroup).toBeCalledWith(['Apple']);
});
it('passes prefixCls down to checkbox', () => {
const options = [
{ label: 'Apple', value: 'Apple' },
{ label: 'Orange', value: 'Orange' },
];
const wrapper = render(
<Checkbox.Group prefixCls="my-checkbox" options={options} />
);
expect(wrapper).toMatchSnapshot();
});
});

View File

@@ -1,7 +1,7 @@
import Checkbox from './Checkbox';
import Group from './Group';
export { CheckboxProps } from './Checkbox';
export { CheckboxProps, CheckboxChangeEvent } from './Checkbox';
export { CheckboxGroupProps, CheckboxOptionType } from './Group';
Checkbox.Group = Group;

View File

@@ -17,7 +17,7 @@
.@{checkbox-prefix-cls}-wrapper:hover &-inner,
&:hover &-inner,
&-input:focus + &-inner {
border-color: @primary-color;
border-color: @checkbox-color;
}
&-checked:after {
@@ -27,7 +27,7 @@
width: 100%;
height: 100%;
border-radius: @border-radius-sm;
border: 1px solid @primary-color;
border: 1px solid @checkbox-color;
content: '';
animation: antCheckboxEffect 0.36s ease-in-out;
animation-fill-mode: both;
@@ -115,8 +115,8 @@
.@{checkbox-prefix-cls}-checked,
.@{checkbox-prefix-cls}-indeterminate {
.@{checkbox-inner-prefix-cls} {
background-color: @primary-color;
border-color: @primary-color;
background-color: @checkbox-color;
border-color: @checkbox-color;
}
}

View File

@@ -10,6 +10,7 @@ export interface CollapsePanelProps {
style?: React.CSSProperties;
showArrow?: boolean;
prefixCls?: string;
forceRender?: boolean;
}
export default class CollapsePanel extends React.Component<CollapsePanelProps, {}> {

View File

@@ -30,3 +30,4 @@ A content area which can be collapsed and expanded.
| header | Title of the panel | string\|ReactNode | - |
| key | Unique key identifying the panel from among its siblings | string | - |
| showArrow | If `false`, panel will not show arrow icon | boolean | `true` |
| forceRender | Forced render of content on panel, instead of lazy rending after clicking on header | boolean | `false` |

View File

@@ -30,3 +30,4 @@ cols: 1
| disabled | 禁用后的面板展开与否将无法通过用户交互改变 | boolean | false |
| header | 面板头内容 | string\|ReactNode | 无 |
| key | 对应 activeKey | string | 无 |
| forceRender | 被隐藏时是否渲染 DOM 结构 | boolean | false |

View File

@@ -6,9 +6,8 @@ import RcDatePicker from 'rc-calendar/lib/Picker';
import classNames from 'classnames';
import Icon from '../icon';
import warning from '../_util/warning';
import callMoment from '../_util/callMoment';
export type RangePickerValue = moment.Moment[];
import interopDefault from '../_util/interopDefault';
import { RangePickerValue, RangePickerPresetRange } from './interface';
export interface RangePickerState {
value?: RangePickerValue;
@@ -17,21 +16,21 @@ export interface RangePickerState {
hoverValue?: RangePickerValue;
}
function getShowDateFromValue(value: moment.Moment[]): moment.Moment[] | undefined {
function getShowDateFromValue(value: RangePickerValue) {
const [start, end] = value;
// value could be an empty array, then we should not reset showDate
if (!start && !end) {
return;
}
const newEnd = end && end.isSame(start, 'month') ? end.clone().add(1, 'month') : end;
return [start, newEnd];
return [start, newEnd] as RangePickerValue;
}
function formatValue(value: moment.Moment | undefined, format: string): string {
return (value && value.format(format)) || '';
}
function pickerValueAdapter(value?: moment.Moment | moment.Moment[]): moment.Moment[] | undefined {
function pickerValueAdapter(value?: moment.Moment | RangePickerValue): RangePickerValue | undefined {
if (!value) {
return;
}
@@ -48,6 +47,21 @@ function isEmptyArray(arr: any) {
return false;
}
function fixLocale(value: RangePickerValue | undefined, localeCode: string) {
if (!localeCode) {
return;
}
if (!value || value.length === 0) {
return;
}
if (value[0]) {
value[0]!.locale(localeCode);
}
if (value[1]) {
value[1]!.locale(localeCode);
}
}
export default class RangePicker extends React.Component<any, RangePickerState> {
static defaultProps = {
prefixCls: 'ant-calendar',
@@ -61,8 +75,8 @@ export default class RangePicker extends React.Component<any, RangePickerState>
super(props);
const value = props.value || props.defaultValue || [];
if (
value[0] && !moment.isMoment(value[0]) ||
value[1] && !moment.isMoment(value[1])
value[0] && !interopDefault(moment).isMoment(value[0]) ||
value[1] && !interopDefault(moment).isMoment(value[1])
) {
throw new Error(
'The value/defaultValue of RangePicker must be a moment object array after `antd@2.0`, ' +
@@ -72,7 +86,7 @@ export default class RangePicker extends React.Component<any, RangePickerState>
const pickerValue = !value || isEmptyArray(value) ? props.defaultPickerValue : value;
this.state = {
value,
showDate: pickerValueAdapter(pickerValue || callMoment(moment)),
showDate: pickerValueAdapter(pickerValue || interopDefault(moment)()),
open: props.open,
hoverValue: [],
};
@@ -103,7 +117,7 @@ export default class RangePicker extends React.Component<any, RangePickerState>
clearHoverValue = () => this.setState({ hoverValue: [] });
handleChange = (value: moment.Moment[]) => {
handleChange = (value: RangePickerValue) => {
const props = this.props;
if (!('value' in props)) {
this.setState(({ showDate }) => ({
@@ -122,6 +136,10 @@ export default class RangePicker extends React.Component<any, RangePickerState>
this.setState({ open });
}
if (open === false) {
this.clearHoverValue();
}
const { onOpenChange } = this.props;
if (onOpenChange) {
onOpenChange(open);
@@ -132,7 +150,36 @@ export default class RangePicker extends React.Component<any, RangePickerState>
handleHoverChange = (hoverValue: any) => this.setState({ hoverValue });
setValue(value: moment.Moment[], hidePanel?: boolean) {
handleRangeMouseLeave = () => {
if (this.state.open) {
this.clearHoverValue();
}
}
handleCalendarInputSelect = (value: RangePickerValue) => {
if (!value[0]) {
return;
}
this.setState(({ showDate }) => ({
value,
showDate: getShowDateFromValue(value) || showDate,
}));
}
handleRangeClick = (value: RangePickerPresetRange) => {
if (typeof value === 'function') {
value = value();
}
this.setValue(value, true);
const { onOk } = this.props;
if (onOk) {
onOk(value);
}
}
setValue(value: RangePickerValue, hidePanel?: boolean) {
this.handleChange(value);
if ((hidePanel || !this.props.showTime) && !('open' in this.props)) {
this.setState({ open: false });
@@ -166,9 +213,9 @@ export default class RangePicker extends React.Component<any, RangePickerState>
return (
<a
key={range}
onClick={() => this.setValue(value, true)}
onClick={() => this.handleRangeClick(value)}
onMouseEnter={() => this.setState({ hoverValue: value })}
onMouseLeave={this.clearHoverValue}
onMouseLeave={this.handleRangeMouseLeave}
>
{range}
</a>
@@ -192,14 +239,9 @@ export default class RangePicker extends React.Component<any, RangePickerState>
ranges, onOk, locale, localeCode, format,
dateRender, onCalendarChange,
} = props;
if (value && localeCode) {
if (value[0]) {
value[0].locale(localeCode);
}
if (value[1]) {
value[1].locale(localeCode);
}
}
fixLocale(value, localeCode);
fixLocale(showDate, localeCode);
warning(!('onOK' in props), 'It should be `RangePicker[onOk]`, instead of `onOK`!');
@@ -250,6 +292,7 @@ export default class RangePicker extends React.Component<any, RangePickerState>
onHoverChange={this.handleHoverChange}
onPanelChange={props.onPanelChange}
showToday={showToday}
onInputSelect={this.handleCalendarInputSelect}
/>
);
@@ -298,6 +341,7 @@ export default class RangePicker extends React.Component<any, RangePickerState>
return (
<span
ref={this.savePicker}
id={props.id}
className={classNames(props.className, props.pickerClass)}
style={{ ...style, ...pickerStyle }}
tabIndex={props.disabled ? -1 : 0}

View File

@@ -4,6 +4,7 @@ import Calendar from 'rc-calendar';
import RcDatePicker from 'rc-calendar/lib/Picker';
import classNames from 'classnames';
import Icon from '../icon';
import interopDefault from '../_util/interopDefault';
function formatValue(value: moment.Moment | null, format: string): string {
return (value && value.format(format)) || '';
@@ -11,7 +12,7 @@ function formatValue(value: moment.Moment | null, format: string): string {
export default class WeekPicker extends React.Component<any, any> {
static defaultProps = {
format: 'YYYY-Wo',
format: 'gggg-wo',
allowClear: true,
};
@@ -20,7 +21,7 @@ export default class WeekPicker extends React.Component<any, any> {
constructor(props: any) {
super(props);
const value = props.value || props.defaultValue;
if (value && !moment.isMoment(value)) {
if (value && !interopDefault(moment).isMoment(value)) {
throw new Error(
'The value/defaultValue of DatePicker or MonthPicker must be ' +
'a moment object after `antd@2.0`, see: https://u.ant.design/date-picker-value',
@@ -39,8 +40,8 @@ export default class WeekPicker extends React.Component<any, any> {
const selectedValue = this.state.value;
const { prefixCls } = this.props;
if (selectedValue &&
current.year() === selectedValue.year() &&
current.week() === selectedValue.week()) {
current.year() === selectedValue.year() &&
current.week() === selectedValue.week()) {
return (
<div className={`${prefixCls}-selected-day`}>
<div className={`${prefixCls}-date`}>
@@ -50,7 +51,7 @@ export default class WeekPicker extends React.Component<any, any> {
);
}
return (
<div className={`${prefixCls}-calendar-date`}>
<div className={`${prefixCls}-date`}>
{current.date()}
</div>
);
@@ -83,6 +84,7 @@ export default class WeekPicker extends React.Component<any, any> {
const {
prefixCls, className, disabled, pickerClass, popupStyle,
pickerInputClass, format, allowClear, locale, localeCode, disabledDate,
style, onFocus, onBlur,
} = this.props;
const pickerValue = this.state.value;
@@ -122,8 +124,9 @@ export default class WeekPicker extends React.Component<any, any> {
value={(value && value.format(format)) || ''}
placeholder={placeholder}
className={pickerInputClass}
onFocus={this.props.onFocus}
onBlur={this.props.onBlur}
onFocus={onFocus}
onBlur={onBlur}
style={style}
/>
{clearIcon}
<span className={`${prefixCls}-picker-icon`} />
@@ -131,7 +134,7 @@ export default class WeekPicker extends React.Component<any, any> {
);
};
return (
<span className={classNames(className, pickerClass)}>
<span className={classNames(className, pickerClass)} id={this.props.id}>
<RcDatePicker
{...this.props}
calendar={calendar}

View File

@@ -3,11 +3,27 @@ import { mount } from 'enzyme';
import moment from 'moment';
import MockDate from 'mockdate';
import DatePicker from '..';
import {
selectDate,
openPanel,
clearInput,
nextYear,
nextMonth,
hasSelected,
} from './utils';
import focusTest from '../../../tests/shared/focusTest';
describe('DatePicker', () => {
focusTest(DatePicker);
beforeEach(() => {
MockDate.set(moment('2016-11-22'));
});
afterEach(() => {
MockDate.reset();
});
it('prop locale should works', () => {
const locale = {
lang: {
@@ -46,12 +62,80 @@ describe('DatePicker', () => {
placeholder: 'Избор на час',
},
};
MockDate.set(new Date('2016-11-22').getTime() + (new Date().getTimezoneOffset() * 60 * 1000));
const birthday = moment('2000-01-01', 'YYYY-MM-DD');
const wrapper = mount(
<DatePicker open locale={locale} value={birthday} />
);
expect(wrapper.render()).toMatchSnapshot();
MockDate.reset();
});
// Fix https://github.com/ant-design/ant-design/issues/8885
it('control value after panel closed', () => {
class Test extends React.Component {
state = {
cleared: false,
value: moment(),
}
onChange = (value) => {
let cleared = this.state.cleared;
if (cleared) {
value = moment(moment(value).format('YYYY-MM-DD 12:12:12'));
cleared = false;
}
if (!value) {
cleared = true;
}
this.setState({ value, cleared });
}
render() {
return (
<DatePicker
showTime
value={this.state.value}
format="YYYY-MM-DD HH:mm:ss"
onChange={this.onChange}
/>
);
}
}
const wrapper = mount(<Test />);
// clear input
clearInput(wrapper);
openPanel(wrapper);
selectDate(wrapper, moment('2016-11-13'));
expect(wrapper.find('.ant-calendar-input').getDOMNode().value).toBe('2016-11-13 12:12:12');
selectDate(wrapper, moment('2016-11-14'));
expect(wrapper.find('.ant-calendar-input').getDOMNode().value).toBe('2016-11-14 12:12:12');
});
it('triggers onChange only when date was selected', () => {
const handleChange = jest.fn();
const wrapper = mount(
<DatePicker onChange={handleChange} />
);
openPanel(wrapper);
nextYear(wrapper);
expect(handleChange).not.toBeCalled();
nextMonth(wrapper);
expect(handleChange).not.toBeCalled();
selectDate(wrapper, moment('2017-12-22'));
expect(handleChange).toBeCalled();
});
it('clear input', () => {
const wrapper = mount(
<DatePicker />
);
openPanel(wrapper);
selectDate(wrapper, moment('2016-11-23'));
clearInput(wrapper);
openPanel(wrapper);
expect(hasSelected(wrapper, moment('2016-11-22'))).toBe(true);
});
});

View File

@@ -2,6 +2,8 @@ import React from 'react';
import { mount, render } from 'enzyme';
import moment from 'moment';
import DatePicker from '../';
import { setMockDate, resetMockDate } from '../../../tests/utils';
import { selectDate } from './utils';
import focusTest from '../../../tests/shared/focusTest';
const { RangePicker } = DatePicker;
@@ -9,6 +11,14 @@ const { RangePicker } = DatePicker;
describe('RangePicker', () => {
focusTest(RangePicker);
beforeEach(() => {
setMockDate();
});
afterEach(() => {
resetMockDate();
});
it('show month panel according to value', () => {
const birthday = moment('2000-01-01', 'YYYY-MM-DD').locale('zh-cn');
const wrapper = mount(
@@ -112,4 +122,97 @@ describe('RangePicker', () => {
expect(() => rangeCalendarWrapper.find('.ant-calendar-cell').at(15).simulate('click').simulate('click'))
.not.toThrow();
});
it('clear hover value after panel close', () => {
jest.useFakeTimers();
const wrapper = mount(
<div>
<RangePicker value={[moment(), moment().add(2, 'day')]} />
</div>
);
wrapper.find('.ant-calendar-picker-input').simulate('click');
wrapper.find('.ant-calendar-cell').at(25).simulate('click');
wrapper.find('.ant-calendar-cell').at(27).simulate('mouseEnter');
document.dispatchEvent(new MouseEvent('mousedown'));
jest.runAllTimers();
wrapper.find('.ant-calendar-picker-input').simulate('click');
expect(
wrapper.find('.ant-calendar-cell').at(23).hasClass('ant-calendar-in-range-cell')
).toBe(true);
});
describe('preset range', () => {
it('static range', () => {
const range = [moment().subtract(2, 'd'), moment()];
const format = 'YYYY-MM-DD HH:mm:ss';
const wrapper = mount(
<RangePicker
ranges={{ 'recent two days': range }}
format={format}
/>
);
wrapper.find('.ant-calendar-picker-input').simulate('click');
wrapper.find('.ant-calendar-range-quick-selector a').simulate('click');
expect(
wrapper.find('.ant-calendar-range-picker-input').first().getDOMNode().value
).toBe(range[0].format(format));
expect(
wrapper.find('.ant-calendar-range-picker-input').last().getDOMNode().value
).toBe(range[1].format(format));
});
it('function range', () => {
const range = [moment().subtract(2, 'd'), moment()];
const format = 'YYYY-MM-DD HH:mm:ss';
const wrapper = mount(
<RangePicker
ranges={{ 'recent two days': () => range }}
format={format}
/>
);
wrapper.find('.ant-calendar-picker-input').simulate('click');
wrapper.find('.ant-calendar-range-quick-selector a').simulate('click');
expect(
wrapper.find('.ant-calendar-range-picker-input').first().getDOMNode().value
).toBe(range[0].format(format));
expect(
wrapper.find('.ant-calendar-range-picker-input').last().getDOMNode().value
).toBe(range[1].format(format));
});
});
// https://github.com/ant-design/ant-design/issues/6999
it('input date manually', () => {
const wrapper = mount(<RangePicker open />);
const dateString = '2008-12-31';
const input = wrapper.find('.ant-calendar-input').first();
input.simulate('change', { target: { value: dateString } });
expect(input.getDOMNode().value).toBe(dateString);
});
it('triggers onOk when click on preset range', () => {
const handleOk = jest.fn();
const range = [moment().subtract(2, 'd'), moment()];
const wrapper = mount(
<RangePicker
ranges={{ 'recent two days': range }}
onOk={handleOk}
/>
);
wrapper.find('.ant-calendar-picker-input').simulate('click');
wrapper.find('.ant-calendar-range-quick-selector a').simulate('click');
expect(handleOk).toBeCalledWith(range);
});
// https://github.com/ant-design/ant-design/issues/9267
it('invali end date not throw error', () => {
const wrapper = mount(<RangePicker />);
wrapper.find('.ant-calendar-picker-input').simulate('click');
selectDate(wrapper, moment('2017-09-18'), 0);
selectDate(wrapper, moment('2017-10-18'), 1);
wrapper.find('.ant-calendar-picker-input').simulate('click');
expect(() =>
wrapper.find('.ant-calendar-input').at(1).simulate('change', { target: { value: '2016-01-01' } })
).not.toThrow();
});
});

View File

@@ -1,3 +1,5 @@
import React from 'react';
import { mount } from 'enzyme';
import DatePicker from '..';
import focusTest from '../../../tests/shared/focusTest';
@@ -5,4 +7,11 @@ const { WeekPicker } = DatePicker;
describe('WeekPicker', () => {
focusTest(WeekPicker);
it('should support style prop', () => {
const wrapper = mount(
<WeekPicker style={{ width: 400 }} />
);
expect(wrapper.render()).toMatchSnapshot();
});
});

View File

@@ -0,0 +1,20 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`WeekPicker should support style prop 1`] = `
<span
class="ant-calendar-picker"
>
<span>
<input
class="ant-calendar-picker-input ant-input"
placeholder="Select date"
readonly=""
style="width: 400px;"
value=""
/>
<span
class="ant-calendar-picker-icon"
/>
</span>
</span>
`;

View File

@@ -601,6 +601,7 @@ exports[`renders ./components/date-picker/demo/size.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="large"
/>
<span
class="ant-radio-button-inner"
@@ -620,6 +621,7 @@ exports[`renders ./components/date-picker/demo/size.md correctly 1`] = `
checked=""
class="ant-radio-button-input"
type="radio"
value="default"
/>
<span
class="ant-radio-button-inner"
@@ -638,6 +640,7 @@ exports[`renders ./components/date-picker/demo/size.md correctly 1`] = `
<input
class="ant-radio-button-input"
type="radio"
value="small"
/>
<span
class="ant-radio-button-inner"

View File

@@ -443,7 +443,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="1999年12月27日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
27
</div>
@@ -454,7 +454,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="1999年12月28日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
28
</div>
@@ -465,7 +465,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="1999年12月29日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
29
</div>
@@ -476,7 +476,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="1999年12月30日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
30
</div>
@@ -487,7 +487,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="1999年12月31日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
31
</div>
@@ -539,7 +539,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月3日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
3
</div>
@@ -550,7 +550,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月4日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
4
</div>
@@ -561,7 +561,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月5日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
5
</div>
@@ -572,7 +572,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月6日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
6
</div>
@@ -583,7 +583,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月7日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
7
</div>
@@ -594,7 +594,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月8日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
8
</div>
@@ -605,7 +605,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月9日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
9
</div>
@@ -627,7 +627,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月10日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
10
</div>
@@ -638,7 +638,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月11日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
11
</div>
@@ -649,7 +649,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月12日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
12
</div>
@@ -660,7 +660,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月13日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
13
</div>
@@ -671,7 +671,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月14日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
14
</div>
@@ -682,7 +682,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月15日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
15
</div>
@@ -693,7 +693,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月16日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
16
</div>
@@ -715,7 +715,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月17日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
17
</div>
@@ -726,7 +726,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月18日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
18
</div>
@@ -737,7 +737,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月19日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
19
</div>
@@ -748,7 +748,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月20日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
20
</div>
@@ -759,7 +759,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月21日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
21
</div>
@@ -770,7 +770,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月22日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
22
</div>
@@ -781,7 +781,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月23日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
23
</div>
@@ -803,7 +803,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月24日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
24
</div>
@@ -814,7 +814,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月25日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
25
</div>
@@ -825,7 +825,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月26日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
26
</div>
@@ -836,7 +836,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月27日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
27
</div>
@@ -847,7 +847,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月28日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
28
</div>
@@ -858,7 +858,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月29日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
29
</div>
@@ -869,7 +869,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月30日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
30
</div>
@@ -891,7 +891,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年1月31日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
31
</div>
@@ -902,7 +902,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月1日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
1
</div>
@@ -913,7 +913,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月2日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
2
</div>
@@ -924,7 +924,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月3日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
3
</div>
@@ -935,7 +935,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月4日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
4
</div>
@@ -946,7 +946,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月5日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
5
</div>
@@ -957,7 +957,7 @@ exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `
title="2000年2月6日"
>
<div
class="ant-calendar-calendar-date"
class="ant-calendar-date"
>
6
</div>

View File

@@ -0,0 +1,28 @@
/* eslint-disable import/prefer-default-export */
export function selectDate(wrapper, date, index) {
let calendar = wrapper;
if (index !== undefined) {
calendar = wrapper.find('.ant-calendar-range-part').at(index);
}
calendar.find({ title: date.format('LL'), role: 'gridcell' }).simulate('click');
}
export function hasSelected(wrapper, date) {
return wrapper.find({ title: date.format('LL'), role: 'gridcell' }).hasClass('ant-calendar-selected-day');
}
export function openPanel(wrapper) {
wrapper.find('.ant-calendar-picker-input').simulate('click');
}
export function clearInput(wrapper) {
wrapper.find('.ant-calendar-picker-clear').hostNodes().simulate('click');
}
export function nextYear(wrapper) {
wrapper.find('.ant-calendar-next-year-btn').simulate('click');
}
export function nextMonth(wrapper) {
wrapper.find('.ant-calendar-next-month-btn').simulate('click');
}

View File

@@ -6,7 +6,7 @@ import classNames from 'classnames';
import omit from 'omit.js';
import Icon from '../icon';
import warning from '../_util/warning';
import callMoment from '../_util/callMoment';
import interopDefault from '../_util/interopDefault';
export interface PickerProps {
value?: moment.Moment;
@@ -26,7 +26,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
constructor(props: any) {
super(props);
const value = props.value || props.defaultValue;
if (value && !moment.isMoment(value)) {
if (value && !interopDefault(moment).isMoment(value)) {
throw new Error(
'The value/defaultValue of DatePicker or MonthPicker must be ' +
'a moment object after `antd@2.0`, see: https://u.ant.design/date-picker-value',
@@ -34,6 +34,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
}
this.state = {
value,
showDate: value,
};
}
@@ -41,6 +42,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
if ('value' in nextProps) {
this.setState({
value: nextProps.value,
showDate: nextProps.value,
});
}
}
@@ -63,11 +65,18 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
handleChange = (value: moment.Moment | null) => {
const props = this.props;
if (!('value' in props)) {
this.setState({ value });
this.setState({
value,
showDate: value,
});
}
props.onChange(value, (value && value.format(props.format)) || '');
}
handleCalendarChange = (value: moment.Moment) => {
this.setState({ showDate: value });
}
focus() {
this.input.focus();
}
@@ -81,7 +90,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
}
render() {
const { value } = this.state;
const { value, showDate } = this.state;
const props = omit(this.props, ['onChange']);
const { prefixCls, locale, localeCode } = props;
@@ -95,6 +104,10 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
[`${prefixCls}-month`]: MonthCalendar === TheCalendar,
});
if (value && localeCode) {
value.locale(localeCode);
}
let pickerProps: Object = {};
let calendarProps: any = {};
if (props.showTime) {
@@ -119,7 +132,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
disabledTime={disabledTime}
locale={locale.lang}
timePicker={props.timePicker}
defaultValue={props.defaultPickerValue || callMoment(moment)}
defaultValue={props.defaultPickerValue || interopDefault(moment)()}
dateInputPlaceholder={placeholder}
prefixCls={prefixCls}
className={calendarClassName}
@@ -130,6 +143,8 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
monthCellContentRender={props.monthCellContentRender}
renderFooter={this.renderFooter}
onPanelChange={props.onPanelChange}
onChange={this.handleCalendarChange}
value={showDate}
/>
);
@@ -156,12 +171,9 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
</div>
);
const pickerValue = value;
if (pickerValue && localeCode) {
pickerValue.locale(localeCode);
}
return (
<span
id={props.id}
className={classNames(props.className, props.pickerClass)}
style={props.style}
onFocus={props.onFocus}
@@ -171,7 +183,7 @@ export default function createPicker(TheCalendar: React.ComponentClass): any {
{...props}
{...pickerProps}
calendar={calendar}
value={pickerValue}
value={value}
prefixCls={`${prefixCls}-picker-container`}
style={props.popupStyle}
>

View File

@@ -47,6 +47,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
| open | open state of picker | boolean | - |
| placeholder | placeholder of date input | string\|RangePicker\[] | - |
| popupStyle | to customize the style of the popup calendar | object | {} |
| dropdownClassName | to customize the className of the popup calendar | string | - |
| size | determine the size of the input box, the height of `large` and `small`, are 40px and 24px respectively, while default size is 32px | string | - |
| style | to customize the style of the input box | object | {} |
| onOpenChange | a callback function, can be executed whether the popup calendar is popped up or closed | function(status) | - |
@@ -90,7 +91,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| defaultValue | to set default date | [moment](http://momentjs.com/) | - |
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-Wo" |
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
| value | to set date | [moment](http://momentjs.com/) | - |
| onChange | a callback function, can be executed when the selected time is changing | function(date: moment, dateString: string) | - |
@@ -101,7 +102,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
| defaultValue | to set default date | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | - |
| disabledTime | to specify the time that cannot be selected | function(dates: [moment, moment], partial: `'start'|'end'`) | - |
| format | to set the date format | string | "YYYY-MM-DD HH:mm:ss" |
| ranges | preseted ranges for quick selection | { [range: string]&#x3A; [moment](http://momentjs.com/)\[] } | - |
| ranges | preseted ranges for quick selection | { \[range: string\]&#x3A; [moment](http://momentjs.com/)\[] } \| () => { \[range: string\]&#x3A; [moment](http://momentjs.com/)\[] } | - |
| renderExtraFooter | render extra footer in panel | () => React.ReactNode | - |
| showTime | to provide an additional time selection | object\|boolean | [TimePicker Options](/components/time-picker/#API) |
| showTime.defaultValue | to set default time of selected date, [demo](https://ant.design/components/date-picker/#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | [moment(), moment()] |

View File

@@ -1,98 +1,20 @@
import * as React from 'react';
import * as moment from 'moment';
import RcCalendar from 'rc-calendar';
import MonthCalendar from 'rc-calendar/lib/MonthCalendar';
import createPicker from './createPicker';
import wrapPicker from './wrapPicker';
import RangePicker from './RangePicker';
import WeekPicker from './WeekPicker';
import { TimePickerProps } from '../time-picker';
import { DatePickerProps, DatePickerDecorator } from './interface';
export interface PickerProps {
prefixCls?: string;
inputPrefixCls?: string;
format?: string;
disabled?: boolean;
allowClear?: boolean;
className?: string;
style?: React.CSSProperties;
popupStyle?: React.CSSProperties;
locale?: any;
size?: 'large' | 'small' | 'default';
getCalendarContainer?: (triggerNode: Element) => HTMLElement;
open?: boolean;
onOpenChange?: (status: boolean) => void;
disabledDate?: (current: moment.Moment) => boolean;
renderExtraFooter?: () => React.ReactNode;
dateRender?: (current: moment.Moment, today: moment.Moment) => React.ReactNode;
}
export interface SinglePickerProps {
value?: moment.Moment;
defaultValue?: moment.Moment;
defaultPickerValue?: moment.Moment;
onChange?: (date: moment.Moment, dateString: string) => void;
}
export interface DatePickerProps extends PickerProps, SinglePickerProps {
className?: string;
showTime?: TimePickerProps | boolean;
showToday?: boolean;
open?: boolean;
disabledTime?: (current: moment.Moment) => {
disabledHours?: () => number[],
disabledMinutes?: () => number[],
disabledSeconds?: () => number[],
};
onOpenChange?: (status: boolean) => void;
onOk?: (selectedTime: moment.Moment) => void;
placeholder?: string;
}
const DatePicker = wrapPicker(createPicker(RcCalendar)) as React.ClassicComponentClass<DatePickerProps>;
export interface MonthPickerProps extends PickerProps, SinglePickerProps {
className?: string;
placeholder?: string;
}
const MonthPicker = wrapPicker(createPicker(MonthCalendar), 'YYYY-MM');
export interface RangePickerProps extends PickerProps {
className?: string;
value?: [moment.Moment, moment.Moment];
defaultValue?: [moment.Moment, moment.Moment];
defaultPickerValue?: [moment.Moment, moment.Moment];
onChange?: (dates: [moment.Moment, moment.Moment], dateStrings: [string, string]) => void;
onCalendarChange?: (dates: [moment.Moment, moment.Moment], dateStrings: [string, string]) => void;
onOk?: (selectedTime: moment.Moment) => void;
showTime?: TimePickerProps | boolean;
ranges?: {
[range: string]: moment.Moment[],
};
placeholder?: [string, string];
mode?: string | string[];
disabledTime?: (current: moment.Moment, type: string) => {
disabledHours?: () => number[],
disabledMinutes?: () => number[],
disabledSeconds?: () => number[],
};
onPanelChange?: (value?: moment.Moment[], mode?: string | string[]) => void;
}
export interface WeexPickerProps extends PickerProps, SinglePickerProps {
className?: string;
placeholder?: string;
}
Object.assign(DatePicker, {
RangePicker: wrapPicker(RangePicker),
MonthPicker,
WeekPicker: wrapPicker(WeekPicker, 'YYYY-Wo'),
WeekPicker: wrapPicker(WeekPicker, 'gggg-wo'),
});
export interface DatePickerDecorator extends React.ClassicComponentClass<DatePickerProps> {
RangePicker: React.ClassicComponentClass<RangePickerProps>;
MonthPicker: React.ClassicComponentClass<MonthPickerProps>;
WeekPicker: React.ClassicComponentClass<WeexPickerProps>;
}
export default DatePicker as DatePickerDecorator;

View File

@@ -47,7 +47,8 @@ subtitle: 日期选择框
| locale | 国际化配置 | object | [默认配置](https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json) |
| open | 控制弹层是否展开 | boolean | - |
| placeholder | 输入框提示文字 | string\|RangePicker\[] | - |
| popupStyle | 外的弹出日历样式 | object | {} |
| popupStyle | 外的弹出日历样式 | object | {} |
| dropdownClassName | 额外的弹出日历 className | string | - |
| size | 输入框大小,`large` 高度为 40px`small` 为 24px默认是 32px | string | 无 |
| style | 自定义输入框样式 | object | {} |
| onOpenChange | 弹出日历和关闭日历的回调 | function(status) | 无 |
@@ -90,7 +91,7 @@ subtitle: 日期选择框
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| defaultValue | 默认日期 | [moment](http://momentjs.com/) | - |
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-Wo" |
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
| value | 日期 | [moment](http://momentjs.com/) | - |
| onChange | 时间发生变化的回调,发生在用户选择时间时 | function(date: moment, dateString: string) | - |
@@ -101,7 +102,7 @@ subtitle: 日期选择框
| defaultValue | 默认日期 | [moment](http://momentjs.com/)\[] | 无 |
| disabledTime | 不可选择的时间 | function(dates: [moment, moment], partial: `'start'|'end'`) | 无 |
| format | 展示的日期格式 | string | "YYYY-MM-DD HH:mm:ss" |
| ranges       | 预设时间范围快捷选择 | { [range: string]&#x3A; [moment](http://momentjs.com/)\[] } | 无 |
| ranges       | 预设时间范围快捷选择 | { \[range: string\]&#x3A; [moment](http://momentjs.com/)\[] } \| () => { \[range: string\]&#x3A; [moment](http://momentjs.com/)\[] } | 无 |
| renderExtraFooter | 在面板中添加额外的页脚 | () => React.ReactNode | - |
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker/#API) |
| showTime.defaultValue | 设置用户选择日期时默认的时分秒,[例子](https://ant.design/components/date-picker/#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | [moment(), moment()] |

View File

@@ -0,0 +1,91 @@
import * as React from 'react';
import * as moment from 'moment';
import { TimePickerProps } from '../time-picker';
export interface PickerProps {
id?: number | string;
prefixCls?: string;
inputPrefixCls?: string;
format?: string;
disabled?: boolean;
allowClear?: boolean;
className?: string;
style?: React.CSSProperties;
popupStyle?: React.CSSProperties;
dropdownClassName?: string;
locale?: any;
size?: 'large' | 'small' | 'default';
getCalendarContainer?: (triggerNode: Element) => HTMLElement;
open?: boolean;
onOpenChange?: (status: boolean) => void;
disabledDate?: (current: moment.Moment) => boolean;
renderExtraFooter?: () => React.ReactNode;
dateRender?: (current: moment.Moment, today: moment.Moment) => React.ReactNode;
}
export interface SinglePickerProps {
value?: moment.Moment;
defaultValue?: moment.Moment;
defaultPickerValue?: moment.Moment;
onChange?: (date: moment.Moment, dateString: string) => void;
}
export interface DatePickerProps extends PickerProps, SinglePickerProps {
className?: string;
showTime?: TimePickerProps | boolean;
showToday?: boolean;
open?: boolean;
disabledTime?: (current: moment.Moment) => {
disabledHours?: () => number[],
disabledMinutes?: () => number[],
disabledSeconds?: () => number[],
};
onOpenChange?: (status: boolean) => void;
onOk?: (selectedTime: moment.Moment) => void;
placeholder?: string;
}
export interface MonthPickerProps extends PickerProps, SinglePickerProps {
className?: string;
placeholder?: string;
}
export type RangePickerValue =
undefined[] |
[moment.Moment] |
[undefined, moment.Moment] |
[moment.Moment, moment.Moment];
export type RangePickerPresetRange = RangePickerValue | (() => RangePickerValue);
export interface RangePickerProps extends PickerProps {
className?: string;
value?: RangePickerValue;
defaultValue?: RangePickerValue;
defaultPickerValue?: RangePickerValue;
onChange?: (dates: RangePickerValue, dateStrings: [string, string]) => void;
onCalendarChange?: (dates: RangePickerValue, dateStrings: [string, string]) => void;
onOk?: (selectedTime: moment.Moment) => void;
showTime?: TimePickerProps | boolean;
ranges?: {
[range: string]: RangePickerPresetRange,
};
placeholder?: [string, string];
mode?: string | string[];
disabledTime?: (current: moment.Moment, type: string) => {
disabledHours?: () => number[],
disabledMinutes?: () => number[],
disabledSeconds?: () => number[],
};
onPanelChange?: (value?: RangePickerValue, mode?: string | string[]) => void;
}
export interface WeekPickerProps extends PickerProps, SinglePickerProps {
className?: string;
placeholder?: string;
}
export interface DatePickerDecorator extends React.ClassicComponentClass<DatePickerProps> {
RangePicker: React.ClassicComponentClass<RangePickerProps>;
MonthPicker: React.ClassicComponentClass<MonthPickerProps>;
WeekPicker: React.ClassicComponentClass<WeekPickerProps>;
}

View File

@@ -0,0 +1,18 @@
import CalendarLocale from 'rc-calendar/lib/locale/ku_IQ';
import TimePickerLocale from '../../time-picker/locale/ku_IQ';
// Merge into a locale object
const locale = {
lang: {
placeholder: 'Dîrok hilbijêre',
rangePlaceholder: ['Dîroka destpêkê', 'Dîroka dawîn'],
...CalendarLocale,
},
timePickerLocale: {
...TimePickerLocale,
},
};
// All settings at:
// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json
export default locale;

View File

@@ -0,0 +1,43 @@
import TimePickerLocale from '../../time-picker/locale/sl_SI';
// Merge into a locale object
const locale = {
lang: {
placeholder: 'Izberite datum',
rangePlaceholder: ['Začetni datum', 'Končni datum'],
today: 'Danes',
now: 'Trenutno',
backToToday: 'Nazaj na trenutni datum',
ok: 'Ok',
clear: 'Počisti',
month: 'Mesec',
year: 'Leto',
timeSelect: 'Izberi čas',
dateSelect: 'Izberi datum',
monthSelect: 'Izberite mesec',
yearSelect: 'Izberite leto',
decadeSelect: 'Izberite desetletje',
yearFormat: 'YYYY',
dateFormat: 'D.M.YYYY',
dayFormat: 'D',
dateTimeFormat: 'D.M.YYYY HH:mm:ss',
monthFormat: 'MMMM',
monthBeforeYear: true,
previousMonth: 'Prejšnji mesec (PageUp)',
nextMonth: 'Naslednji mesec (PageDown)',
previousYear: 'Lansko leto (Control + left)',
nextYear: 'Naslednje leto (Control + right)',
previousDecade: 'Prejšnje desetletje',
nextDecade: 'Naslednje desetletje',
previousCentury: 'Zadnje stoletje',
nextCentury: 'Naslednje stoletje',
},
timePickerLocale: {
...TimePickerLocale,
},
};
// All settings at:
// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json
export default locale;

View File

@@ -1,4 +1,4 @@
import CalendarLocale from 'rc-calendar/lib/locale/en_US';
import CalendarLocale from 'rc-calendar/lib/locale/tr_TR';
import TimePickerLocale from '../../time-picker/locale/tr_TR';
// Merge into a locale object

View File

@@ -126,7 +126,6 @@
.@{calendar-prefix-cls}-footer {
position: relative;
height: auto;
line-height: auto;
&-btn {
text-align: right;

View File

@@ -32,6 +32,35 @@ exports[`renders ./components/divider/demo/horizontal.md correctly 1`] = `
</div>
`;
exports[`renders ./components/divider/demo/orientation.md correctly 1`] = `
<div>
<div
class="ant-divider ant-divider-horizontal ant-divider-with-text-left"
>
<span
class="ant-divider-inner-text"
>
Left Text
</span>
</div>
<p>
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>
<div
class="ant-divider ant-divider-horizontal ant-divider-with-text-right"
>
<span
class="ant-divider-inner-text"
>
Right Text
</span>
</div>
<p>
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>
</div>
`;
exports[`renders ./components/divider/demo/vertical.md correctly 1`] = `
<div>
Text

View File

@@ -0,0 +1,27 @@
---
order: 2
title:
zh-CN: 标题位置
en-US: Orientation of title
---
## zh-CN
修改分割线标题的位置。
## en-US
Set orientation of divider to left or right.
````jsx
import { Divider } from 'antd';
ReactDOM.render(
<div>
<Divider orientation="left">Left Text</Divider>
<p>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>
<Divider orientation="right">Right Text</Divider>
<p>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>
</div>
, mountNode);
````

View File

@@ -18,5 +18,6 @@ A divider line separates different content.
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| dashed | whether line is dasded | Boolean | false |
| dashed | whether line is dashed | Boolean | false |
| type | direction type of divider | enum: `horizontal` `vertical` | `horizontal` |
| orientation | position of title inside divider | enum: `left` `right` `center` | `center` |

View File

@@ -4,6 +4,7 @@ import classNames from 'classnames';
export interface DividerProps {
prefixCls?: string;
type?: 'horizontal' | 'vertical';
orientation?: 'left' | 'right';
className?: string;
children?: React.ReactNode;
dashed?: boolean;
@@ -13,14 +14,16 @@ export interface DividerProps {
export default function Divider({
prefixCls = 'ant',
type = 'horizontal',
orientation = '',
className,
children,
dashed,
...restProps,
}: DividerProps) {
const orientationPrefix = (orientation.length > 0) ? '-' + orientation : orientation;
const classString = classNames(
className, `${prefixCls}-divider`, `${prefixCls}-divider-${type}`, {
[`${prefixCls}-divider-with-text`]: children,
[`${prefixCls}-divider-with-text${orientationPrefix}`]: children,
[`${prefixCls}-divider-dashed`]: !!dashed,
});
return (

View File

@@ -18,3 +18,4 @@ subtitle: 分割线
| --- | --- | --- | --- |
| dashed | 是否虚线 | Boolean | false |
| type | 水平还是垂直类型 | enum: `horizontal` `vertical` | `horizontal` |
| orientation | 分割线标题的位置 | enum: `left` `right` | `center` |

View File

@@ -22,6 +22,7 @@
height: 1px;
width: 100%;
margin: 24px 0;
clear: both;
}
&-horizontal&-with-text {
display: table;
@@ -44,17 +45,81 @@
transform: translateY(50%);
}
}
&-inner-text {
display: inline-block;
padding: 0 24px;
}
&-horizontal&-with-text-left {
display: table;
white-space: nowrap;
text-align: center;
background: transparent;
font-weight: 500;
color: @heading-color;
font-size: @font-size-base;
margin: 16px 0;
&:before {
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 5%;
border-top: 1px solid @border-color-split;
transform: translateY(50%);
}
&:after {
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 95%;
border-top: 1px solid @border-color-split;
transform: translateY(50%);
}
&-inner-text {
display: inline-block;
padding: 0 10px;
}
}
&-horizontal&-with-text-right {
display: table;
white-space: nowrap;
text-align: center;
background: transparent;
font-weight: 500;
color: @heading-color;
font-size: @font-size-base;
margin: 16px 0;
&:before {
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 95%;
border-top: 1px solid @border-color-split;
transform: translateY(50%);
}
&:after {
content: '';
display: table-cell;
position: relative;
top: 50%;
width: 5%;
border-top: 1px solid @border-color-split;
transform: translateY(50%);
}
&-inner-text {
display: inline-block;
padding: 0 10px;
}
}
&-dashed {
background: none;
border-top: 1px dashed @border-color-split;
}
&-horizontal&-with-text&-dashed {
border-top: 0;
&:before,

View File

@@ -58,6 +58,7 @@ exports[`renders ./components/dropdown/demo/dropdown-button.md correctly 1`] = `
</button>
<button
class="ant-btn ant-dropdown-trigger ant-btn-default"
disabled=""
type="button"
>
<i

Some files were not shown because too many files have changed in this diff Show More