Compare commits

..

76 Commits

Author SHA1 Message Date
偏右
59c29a400d release 3.26.8 (#21187) 2020-02-03 12:45:28 +08:00
偏右
d3102bb2db 🐛 fix site menu affix bug (#21188)
close #21128
2020-02-03 12:35:04 +08:00
afc163
e036e4c9a3 site: 📣 promote g2plot 2020-02-03 11:38:44 +08:00
Chiciuc Nicușor
da3540bd59 Replace NativeButtonProps with ButtonProps for okButtonProps and cancelButtonProps. (#21165) 2020-01-31 22:09:49 +08:00
Teng YANG
bba87d4125 update display names for layout components (#21124)
(cherry picked from commit 286e0e97f8)
2020-01-28 15:26:55 +08:00
Teng YANG
6de8522894 fix: card actions font-size issue (#21106)
Fix card component action font-size not controlled by theme variable.
2020-01-26 11:40:06 +08:00
信鑫-King
674074ce93 fix: 3.x deploy site (#20682) 2020-01-17 12:31:56 +08:00
Amumu
c68f4463d3 fix error docs (#20926) 2020-01-16 15:58:24 +08:00
偏右
a96a95ccb8 🐛 Fix List item flex layout (#20897)
close #20648
2020-01-15 10:35:45 +08:00
偏右
b112378de3 🐛 Fix Tooltip title 0 is not shown (#20894)
close #20891
2020-01-14 17:55:40 +08:00
Amumu
db4bec92be version 3.23.0 (#20890) 2020-01-14 15:50:16 +08:00
信鑫-King
b6fc0168db chore: check commit (#20880) 2020-01-14 09:41:57 +08:00
信鑫-King
92fe411961 docs: 3.26.7 changelog (#20873)
* upd: version

* 📝 changelog

* 📝 docs
2020-01-14 07:40:32 +08:00
zefeng
ab29ecb377 fix: better approach to solve not show overflow content when in elastic (#20821) 2020-01-13 20:43:03 +08:00
afc163
23d5a856c0 🎬 improve Tag demo 2020-01-08 15:09:24 +08:00
偏右
6e4fa95d0f 🐛 fix Tree switcherIcon shown in leaf node (#20753)
close #20511
2020-01-08 13:17:49 +08:00
afc163
2753ce91c9 🐛 tweak @zindex-badge for table fixed column
close #20750
close #13930
2020-01-08 11:43:10 +08:00
偏右
057f5b8526 🐛 Fix Cascader search bug when fieldNames existed (#20720)
and label/value have same field name

close #20619
2020-01-08 10:38:36 +08:00
Amumu
d3eea22097 fix: correct the collapse-borderless class variable (#20718) (#20721)
Co-authored-by: Kuitos <kuitos.lau@gmail.com>
2020-01-07 15:39:42 +08:00
骗你是小猫咪
da2f54a18a refactor: improve digital input in tooltip demo (#20702) (#20717)
* refactor: improve digital input in tooltip demo

* fix lint
2020-01-07 12:02:21 +08:00
afc163
e5dd231aaa site: 📣 promote yuque activity 2020-01-06 18:03:04 +08:00
偏右
c6eafe8380 🐛 fix Input.Group 1px bug in vertical layout form (#20685)
close #20616
2020-01-06 14:26:11 +08:00
Googleplex
0520b844d5 docs: Update year in change log (#20670)
* Update year in CHANGELOG.zh-CN.md

Update year in change log of 3.26.6 from 2019 to 2020

* Update year in CHANGELOG.en-US.md

Update year in change log of 3.26.6 from 2019 to 2020
2020-01-05 19:09:51 +08:00
zombiej
8dd91ca648 docs: Update home for antd next link 2020-01-03 21:56:38 +08:00
二货机器人
44c9bcafc9 docs: 3.26.6 changelog (#20647)
* 3.26.6 changelog

* add v3 notify
2020-01-03 17:30:45 +08:00
vagusX
4df1cd3db2 docs: update Modal docs (#20612)
* doc: update Modal docs

* doc: update modal en-US doc
2020-01-02 23:22:54 +08:00
二货机器人
2f7c895675 Revert "Update colors.en-US.md (#20606)" (#20607)
This reverts commit c513296849.
2020-01-02 18:18:39 +08:00
myeunhyuk
c513296849 Update colors.en-US.md (#20606) 2020-01-02 18:17:52 +08:00
jiang
2416f733bf fix: url 404 (#20589)
* fix url 404

* update url
2020-01-02 14:16:05 +08:00
偏右
d102c2bf7a 🆙 upgrade stylelint-order (#20585) 2020-01-02 12:11:26 +08:00
偏右
2adf8ced24 fix: 💄 Remove Input.Password value attribute from dom (#20544)
* 💄 Remove Input.Password value attribute in dom

close #20541
close #7761
close #19959
close #20536
close #12672
close #10952

*  fix test coverage

* 🐛 fix defaultValue create `value` attribute in Input.Password
2019-12-31 14:41:09 +08:00
Yaindrop
528f1df5d6 Fix image misplacing (#20552)
Switched the images of "The keyword of the user query is only displayed in three categories, Topics, Questions and Articles." and "The number of categories the keyword of the user query belongs to is uncertain."
2019-12-31 10:56:28 +08:00
DiamondYuan
4297f33e85 fix: use Object.prototype.toString to check object (#20546)
close #20528
2019-12-30 22:14:17 +08:00
偏右
8ea9356399 💄 Improve Step type="navigation" UI in small screen (#20545)
close #19877
2019-12-30 20:13:24 +08:00
二货机器人
bcb71b8b78 chore: dev mode always show debug default (#20535) 2019-12-30 16:31:30 +08:00
liyuanqiu
121437b666 Remove inconsistant style (#20533)
Remove "line-height: unset;" from ".@{radio-group-prefix-cls}".
It causes inconsistance with Checkbox.Group.
See: https://codesandbox.io/s/antd-radio-line-height-8kt7u
2019-12-30 16:01:29 +08:00
诸岳
8e793c431f Bump 3.26.5 2019-12-29 22:10:08 +08:00
诸岳
89472751a7 docs: Add the changelog of 3.26.5 (#20520) 2019-12-29 22:07:36 +08:00
偏右
df8f34309f revert Table page return 1 after sort (#20507)
close #16978
close #17770
close #17648
close #18099
close #17075
close #19369
2019-12-28 21:52:09 +08:00
afc163
670bd4bf5b update snapshots 2019-12-27 12:27:56 +08:00
偏右
75ed2e0745 📝 Add instruction about disabledDate
#19932
#9008
2019-12-27 12:14:15 +08:00
偏右
2f72e472e5 🐛 Fix Table header text align when colspan=1 (#20463)
https://github.com/ant-design/ant-design/issues/20126#issuecomment-563307001
2019-12-26 16:07:01 +08:00
plainnany
77dc5fa4e7 📝 Update draggable.md (#20458)
close #20455
2019-12-26 14:32:14 +08:00
偏右
9ea5fb3050 🐛 Fix Tree wrong indent (#20456)
close #20441
2019-12-26 12:25:00 +08:00
xrkffgg
847f5fcd31 fix: tab bar animated style (#20417)
* fix: tab-bar animated style

* fix css style
2019-12-25 14:11:57 +08:00
afc163
44a63acf13 📝 update feature 2019-12-25 12:48:49 +08:00
陈帅
1ae09841e9 doc: fix warning date (#20413)
close #20411
2019-12-24 16:33:12 +08:00
陈帅
dc3bf75452 docs: add #20325 in 3.26.4 changelog (#20395)
* docs: add 20325 in 3.26.4 changelog

* fix typo
2019-12-24 13:16:46 +08:00
wwwxy
b826157e73 update TreeSelect docs (#20402) 2019-12-24 11:18:43 +08:00
陈帅
088ca07ff0 docs: 3.26.4 changelog (#20379)
* doc: add 3.26.4 changelog

* up to 3.26.4

* fix review typo

* fix review typo
2019-12-23 11:52:42 +08:00
约修亚
f4fd7cf0da Update index.zh-CN.md (#20382)
API中遗漏了code属性?
2019-12-23 11:13:01 +08:00
Hami Abdi
0a00c5e22a Correct Grammar in Form Component's Documentation (#20381)
In a demo corresponding to the form component, a comment contains a grammatical mistake: an infinitive in this context requires the present instead of past tense.
2019-12-23 09:13:04 +08:00
Rustin
92169c4853 upload: fix upload not support ico file type issue(#20360) (#20375) 2019-12-22 17:23:08 +08:00
骗你是小猫咪
74082defe9 fix(Form): feedback icon with input suffix display not correct (#20363)
* fix(From): feedback icon with input suffix display not correct

* update snapshots

* review change

* revert register.md and improve feedback example
2019-12-20 16:24:55 +08:00
偏右
f98debaeee chore: 📝 improve docs and config json (#20364) 2019-12-20 15:07:18 +08:00
偏右
6e27c62eb3 🐛 fix Tag onClick triggered when close (#20355)
close #20344
2019-12-19 22:12:37 +08:00
xrkffgg
38dab1f725 fix: cascader error color (#20347)
* [fix] cascader error color

* fix: cascader error/warning color
2019-12-19 17:14:12 +08:00
wwwxy
f14f934c3d update TreeSelect docs (#20341) 2019-12-19 14:48:06 +08:00
kailunyao
32744e733c fix: Disallow auto focus input after triggering "onSearch" event in mobile and tablet devices (#20332)
close #20297
2019-12-19 12:52:53 +08:00
He Linming
ea9e9fb410 🐛 (Table): fix filters define in onChange (#20337)
close #20270
2019-12-19 10:42:19 +08:00
偏右
7a2d1f2017 💄 optimize Steps labelPlacement vertical UI (#20325) 2019-12-18 17:46:17 +08:00
afc163
aa0b1c5378 chore: 🗑️ remove unused prop 2019-12-18 14:56:23 +08:00
afc163
ced537df48 docs: 📝 fix site overflow style 2019-12-18 14:34:57 +08:00
偏右
930ad2eb40 docs: 📝 Description List => Descriptions (#20316)
* chore: 📝 Description List => Descriptions

* Update index.en-US.md
2019-12-18 12:09:05 +08:00
afc163
cc8ab225cc fix eslint errors 2019-12-17 18:00:38 +08:00
陈帅
b03e93d061 docs: Add contributors list in each documentation (#20135)
* site: add contributors list

* style: change ContributorsList to end

* style: change spin to Skeleton

* 💄 optimize contributors list UI
2019-12-17 17:58:58 +08:00
afc163
7743c2b326 📝 fix target _blank typo 2019-12-17 17:49:16 +08:00
xiaohuoni
b97e9cb6d4 import/extensions:0 2019-12-17 17:37:26 +08:00
dependabot-preview[bot]
edefe8eb66 chore(deps-dev): bump eslint-plugin-import from 2.18.2 to 2.19.1 (#20237)
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.18.2 to 2.19.1.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.18.2...v2.19.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-17 17:36:43 +08:00
afc163
15f75e1c55 fix time picker test snapshots 2019-12-17 16:58:41 +08:00
afc163
333f63bd05 📝 improve antd features in README 2019-12-16 22:42:30 +08:00
偏右
f805d2e292 🐛 fix Tabs ink bar missing transition animation (#20283)
close #20239
2019-12-16 22:20:42 +08:00
偏右
9fa72ab74d 🐛 Fix TreeNode without icon white block (#20274) 2019-12-16 21:25:14 +08:00
afc163
6666520243 📝 Add santd to communication implementation 2019-12-16 14:53:23 +08:00
afc163
d7d4beb280 📝 fix update use-with-create-react-app 2019-12-15 22:25:56 +08:00
偏右
9a4a668a05 chore: 🔧 fix gh-pages actions (#20260)
https://github.com/peaceiris/actions-gh-pages#github-actions-for-github-pages
2019-12-15 14:53:32 +08:00
103 changed files with 1225 additions and 371 deletions

View File

@@ -1,3 +1,3 @@
{
"sandboxes": ["wk04r016q8"]
"sandboxes": ["antd-reproduction-template-6e93z"]
}

View File

@@ -87,6 +87,7 @@ const eslintrc = {
'react/static-property-placement': 0,
'jest/no-test-callback': 0,
'jest/expect-expect': 0,
'import/extensions': 0,
},
globals: {
gtag: true,

View File

@@ -3,7 +3,7 @@ on:
release:
types: [published]
branches:
- master
- 3.x-stable
jobs:
build-and-deploy:
@@ -19,9 +19,11 @@ jobs:
run: npm run predeploy
- name: deploy
uses: peaceiris/actions-gh-pages@v2.5.0
uses: peaceiris/actions-gh-pages@v2
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACCESS_TOKEN }}
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
# PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./_site
with:

View File

@@ -2,17 +2,26 @@
17073025 <17073025@cnsuning.com>
282159468 <282159468@qq.com>
778758944 <778758944@qq.com>
Aaron Cawte <aaron@bbncreative.co>
Aaron Planell López <aaronplanell@gmail.com>
Aditya Padhi <aditya.padhi@outlook.com>
Adrian Dimitrov <dimitrov.adrian@gmail.com>
Ahmad Abdelaziz <ahmad.abdelaziz@robustastudio.com>
Ahmed AlSammany <ahmed.alsammany@incorta.com>
Aidin <aidin.dadashzadeh@gmail.com>
Aiello <770540123@qq.com>
Alan Braithwaite <asbraithwaite@gmail.com>
Albert Zheng <lisong.zheng@gmail.com>
Albert 理斯特 <shuaizhexu@gmail.com>
Alberto Marchetti <cmaster11@gmail.com>
Aleck Landgraf <aleck.landgraf@gmail.com>
Aleksandr Chernokondratenko <etherreals777@gmail.com>
Alex Simons <alexsimons9999@gmail.com>
Alexander <labriko@yandex.ru>
Alexander Anpleenko <vaeum@yandex.com>
Alexander Kachkaev <alexander@kachkaev.ru>
Alexander Suevalov <suevalov.work@gmail.com>
Alexander.Kosov <Alexander.Kosov@nexign-systems.com>
Alexandre Kirszenberg <a.kirszenberg@gmail.com>
Alexey Yakovlev <yallie@yandex.ru>
Alfred Qiu <sc941203@gmail.com>
@@ -28,21 +37,32 @@ Andrew Shearer <andrew@ashearer.com>
Andrey G <plandem@gmail.com>
Andrzej Dybionka <andrzej@arabel.la>
André <mazoni.andre@gmail.com>
Andrés <andresin87@gmail.com>
Ankit Babbar <ankit.babbar@valuebound.com>
Aobo Yang <yangaobo@gmail.com>
Ardo Kusuma <ardo@uber.com>
Arnab Sen <arnabsen@gmail.com>
Arthur Denner Oliveira Santos <arthurdenner7@gmail.com>
Artin <lengthmin@gmail.com>
Arvin Xu <arvinx@foxmail.com>
Ash Kumar <kumar.ashwin@outlook.com>
Ashot Mnatsakanyan <mnatsakanyan.ashot@gmail.com>
Aymen Bouchekoua <bouchekoua.aymen@gmail.com>
BK Heleth <bon.hoo@hotmail.com>
Babajide Fowotade <jide.b.tade@gmail.com>
Barry <barry.yansh@gmail.com>
Bartek <bartek.kozera@gmail.com>
Ben Callaway <me@bencallaway.com>
Benedikt Franke <benedikt@franke.tech>
Benjamin Amelot <bam@activeviam.com>
Benjamin Kniffler <bkniffler@me.com>
Benjy Cui <benjytrys@gmail.com>
Benoît Latinier <benoit@latinier.fr>
Bernie <bernie.wangbj@gmail.com>
Bestie <lucientown@outlook.com>
Bhavesh Chowdhury <bhaveshch20@gmail.com>
Bilal Sirazitdinov <bilalsir@yandex.ru>
Bill Searle <billsearle@gmail.com>
Bill Sheikh <bilawals22@gmail.com>
Bo Chen <bochen2014@yahoo.com>
Bolun Zhang <rzhangbolun@gmail.com>
@@ -61,9 +81,11 @@ Cam Song <neosoyn@gmail.com>
Camol <kwwnjujlc@sina.com>
Cang Ta <hoksilato176@gmail.com>
Canwen Xu <canwenxu@126.com>
Carlos Coves Prieto <carlos.coves@interacso.com>
Carter Feldman <carter@carter.at>
Catalin Miron <mironcatalin@gmail.com>
Cee Cirno <i@cee.moe>
Cemre Mengu <cemremengu@gmail.com>
Chandler Moisen <chandlermoisen@gmail.com>
Chang Wang <cheapsteak@gmail.com>
Charles Covey-Brandt <chazcb@gmail.com>
@@ -75,8 +97,10 @@ Chris Kelly <cjke.7777@gmail.com>
ChrisFan <chris.fan.dev@gmail.com>
Christian <chr.vadala@gmail.com>
Christian Vadalà <chr.vadala@gmail.com>
Christophe Hurpeau <christophe@hurpeau.com>
Christopher Deutsch <cd@cdeutsch.com>
Chuang Yu <cyu9960@gmail.com>
Chuck <wfhtzcf@gmail.com>
Claudio Restifo <claudio.restifo@gmail.com>
Cody Chan <int64ago@gmail.com>
Colton Pierson <colton@coltonpierson.com>
@@ -89,21 +113,32 @@ Daewoong Moon <wiziple@gmail.com>
Damian Green <damian.green@microlease.com>
Damian Green <damian@gcoders.com>
Dan Minshew <ofenixculpa@gmail.com>
Dana Janoskova <dana.janoskova@accenture.com>
Dane David <dndavid102@gmail.com>
Daniel Chang <danielchang2022@u.northwestern.edu>
Daniel Gomez <dgomez@orangeloops.com>
Daniel Harrison <daniel.equiknox@gmail.com>
Danny Hoower Antonio Viasus Avila <danjavia@gmail.com>
Daphne Won <daphne.won@shopee.com>
Daqi Song <dqaria@gmail.com>
Darren Poon <dyhpoon@gmail.com>
David Broder-Rodgers <david.broder-rodgers@softwire.com>
David Hatten <dhatten@covermymeds.com>
David Schneider <davschne@gmail.com>
Dean van Niekerk <deanvniekerk@gmail.com>
DengYun <tdzl2003@gmail.com>
Denis <shumkovdenis@gmail.com>
DiamondYuan <541832074@qq.com>
DiamondYuan <admin@diamondyuan.com>
Dimitri Mitropoulos <dimitrimitropoulos@gmail.com>
Dmitriy <dimusig@gmail.com>
Dmitriy Mironov <dima.dev01@gmail.com>
Dmitry Bolotin <bolotin.dmitriy@gmail.com>
Dmitry Gladkikh <abdurahmanus@gmail.com>
Dmitry Guryev <dmitry.gurjev@gmail.com>
Dmitry Manannikov <email@slonoed.net>
Dmitry Snegirev <rikkitp@gmail.com>
Dmitry Tikhomirov <tikhomirov@element-soft.com>
Dorian <dorian@doma.io>
DosLin <doslino@gmail.com>
Douglas Mason <Demasonjr@gmail.com>
@@ -118,34 +153,44 @@ Eden Wang <yociduo@vip.qq.com>
Eduardo Ludi <eduludi@gmail.com>
Edward <7047924@qq.com>
Egor Yurtaev <yurtaev.egor@gmail.com>
Eldar Mustafaiev <eldar.mustafaiev@gmail.com>
Eli White <github@eli-white.com>
Emerson Laurentino <emersonlaurentino@hotmail.com>
Emma <sima.zhang1990@gmail.com>
Ender Lee <chnliquan@163.com>
Eric <84263800@qq.com>
Eric Celeste <efc@clst.org>
Eric Turriff <eric.turriff@gmail.com>
Erwann Mest <m+github@kud.io>
Eusen <179530591@qq.com>
Evgeny Kuznetsov <jackk@ya.ru>
Eward Song <eward.song@gmail.com>
Federico Marcos <marcosfede@gmail.com>
Ferdi Koomen <info@madebyferdi.com>
Fergus Leung <fergusleung96@gmail.com>
Fernando Giarritiello <fgiarritiello@gmail.com>
Florian Orpelière <florian.orpeliere@gmail.com>
Flynn <li.fulin@foxmail.com>
For177 <mengqiang.q@gmail.com>
Frezc <Frezcw@gmail.com>
Gabe Medrash <gabeme@alleninstitute.org>
Gabriel Nunes <gabriel@multiverso.me>
GalenWong <wonggalen1999@gmail.com>
Gao Jiangmiao <tolbkni@gmail.com>
Gautier <rollingautier2@gmail.com>
Geoff Holden <geoff@brightloudnoise.com>
George Gray <george@ummodesign.com>
Gin-X <xcbwyys@hotmail.com>
Go7hic <gtfx0209@qq.com>
Goh Zhao Yang <austinzy@airasia.com>
Graeme Yeates <gyeates@clearpath.ai>
Graeme Yeates <yeatesgraeme@gmail.com>
Grant Klinsing <gklinsing@gmail.com>
Gray Choi <gray.choi.1988@gmail.com>
Guan Hao <raptium@gmail.com>
Guan Yu Pan (Jacky) <jackypan1989@gmail.com>
Guichi Zhao <zgc910619@gmail.com>
Hami Abdi <abdih@users.noreply.github.com>
HJin.me <hjin.me@gmail.com>
Hai Phan Nguyen <pnghai@gmail.com>
Haibin Yu <haibin.yu@oceanwing.com>
@@ -155,12 +200,18 @@ Hanz Luo <lhz0516@gmail.com>
Harlan <luoxwen@gmail.com>
HarlanLuo <luoxwen@gmail.com>
Haroen Viaene <fingebimus@me.com>
Harry.Hou <harry.hou@ringcentral.com>
Harshit Mehrotra <harshitmehrotra@hotmail.com>
He Linming <hlm52pk@163.com>
Heaven <ne_smalltown@163.com>
Henri Normak <henri.normak@gmail.com>
HeskeyBaozi <hezhiyu233@foxmail.com>
HiddenMan <1196089730@qq.com>
Hieu Ho <hieu.ho.le@lazada.com>
Hieu Pham <phthhieu@gmail.com>
Higor Araújo dos Anjos <higor.araujo.anjos@gmail.com>
Hsuan Lee <HsuanGM@gmail.com>
Hsuan Lee <hsuangm@gmail.com>
Hubert Argasinski <argasinski.hubert@gmail.com>
Hughen <446370503@163.com>
Hugo LEHMANN <shogi31@gmail.com>
@@ -168,12 +219,16 @@ Igor <nemytyshew@yandex.ru>
Igor G <i.gaidai4uk@gmail.com>
Ilan <hasanovtk@gmail.com>
Ilan Hasanov <hasanovtk@gmail.com>
Ilya Bondarenko <bondarenko.ik@gmail.com>
ImJoeHs <865439601@qq.com>
Inclined.Z <zjq0717@163.com>
Infinity <305870677@qq.com>
Inian <inian1234@gmail.com>
Ivan <ivan.pecharitsa@gmail.com>
Ivan Kravets <me@ikravets.com>
Ivan Trofimov <ivan@trofimov.link>
Ivo Stratev <ivo.stratev.tues@gmail.com>
Jack <jacklee82814@gmail.com>
Jack Hsieh <jack@egenware.com>
Jack Lo <jack-lo@foxmail.com>
Jack Works <zjwpeter@gmail.com>
@@ -182,19 +237,30 @@ Jacques Kvam <jwkvam@gmail.com>
JaePil Jung <jjp5023@gmail.com>
Jake Richards <jake.richards@genesys.com>
James <james@schoolshape.com>
James Tsang <wentao_zeng1@163.com>
JamesYin <elantion@gmail.com>
Jaroslav Bereza <github.com@bereza.cz>
Jarvis1010 <travis.mair@gmail.com>
Jason <ceocjy@vip.qq.com>
Jason Chen <ceocjy@vip.qq.com>
Jason Chung <shiningjason1989@gmail.com>
Jason Yin <yinjiangsheng@gmail.com>
Jean-Luc Sorak <jlsorak@icloud.com>
Jeffrey Carl Faden <jeffreyatw@gmail.com>
Jelle de Jong <jelle@hoest.nl>
Jennie <jennie.ji@hotmail.com>
JeromeLin <jerome.lin@zhongan.com>
Jerry Bendy <jerry@icewingcc.com>
Jesper We <jesper@journeyman.se>
Jiabin Peng <png.inside@gmail.com>
Jialei <jialeicui@126.com>
Jiawei Huang <hjiawei@gmail.com>
Jieraaa <842533841@qq.com>
Jin ZHANG <jz.zhangjin@gmail.com>
JinXin <m18508218948@163.com>
Jing Ma <mjingm87@qq.com>
Jingsong Gao <kingsongao1221@gmail.com>
Jinke Li <1359518268@qq.com>
Jinxuan Zhu <zhujinxuan@gmail.com>
Joao Rabelo <jrabelo@tech6.com.br>
Joe <qiaolibo@126.com>
@@ -202,90 +268,124 @@ Joe Hsu <jhsu.x1@gmail.com>
Johannes Loewe <johannes@loewe.pm>
John Johnson III <john@johnjohnson.cc>
John Nguyen <jtnguyen236@gmail.com>
Johnsen <jiajunzhou1994@163.com>
Jonatas Walker <jonataswalker@gmail.com>
Jonathan Lee <1150974628@qq.com>
Jonny Buchanan <jonathan.buchanan@gmail.com>
Jordan Hornblow <jordan@jch254.com>
Josue Peralta <jperal77@gmail.com>
Josué <ujosuegt@outlook.com>
JribiBelhassen <belha9inzaghi@gmail.com>
JuFeng Zhang <zjffun@gmail.com>
Juan Carlos Lloret H <juan.carlos.lloret@lansweeper.com>
Juan Rodrigo Venegas Boesch <jrvboesch@gmail.com>
Julia Passynkova <ipassynk@hotmail.com>
Julien Confetti <julien.confetti@ulg.ac.be>
Junyu Zhan <irrigator@yeah.net>
Juraj Carnogursky <durisvk2@gmail.com>
Justin Reich <reich.justin@gmail.com>
Kaien Liao <liaokaien@gmail.com>
Kamal Mahmudi <kamalmahmudi@yahoo.co.id>
Kasra Bigdeli <kasra85@gmail.com>
Kelvin Chu <chubillkelvin@gmail.com>
Kenaniah Cerny <kenaniah@gmail.com>
Kenneth Luján Rosas <elgenio.03@gmail.com>
Kenneth Truong <kenneth.e.truong@gmail.com>
KentonYu <975853613@qq.com>
Kevin Ivan <info@kevinivan.com>
Kevin Wang <gumtree200@gmail.com>
Kevinaskin <kevinaskin@minus.live>
KgTong <kgtong1992@gmail.com>
Khaled <k.khalil.94@gmail.com>
Khalifa Lame <khalibloo@gmail.com>
Kian <kian@vsu.cc>
Kieren <kierenveerapen94@gmail.com>
Kiho · Cham <monkindey@163.com>
Kim, Harim <harimkims@gmail.com>
Kimmo Saari <kimmo.saari@compile.fi>
Kimmo Saari <kimmo.saari@revolt.fi>
Kirill Alexander Khalitov <voronar@gmail.com>
Kirill Stiopin <kirill.stiopin@hotmail.com>
Knacktus <knacktus@gmail.com>
Kodai Nakamura <kodai.nakamura.215@gmail.com>
Konrad Machlowski <konrad.machlowski@gmail.com>
Kyle Kelley <rgbkrk@gmail.com>
Kyle Rosenberg <kyle.rosenberg@gmail.com>
LLinFan- <catfoursi@qq.com>
LT246-VINHNPH\vinhnph <vinhnph@blockpass.org>
Laith <laith24@gmail.com>
Larry Laski <larry.laski@gmail.com>
LaySent <laysent@gmail.com>
LeeHarlan <709886167@qq.com>
LeezQ <lizhenq2009@gmail.com>
Leo <clinyong@gmail.com>
Leon Koole <leon@koole.io>
Leon Shi <superRaytin@163.com>
Leon Shi <superRaytin@gmail.com>
Li Chao <rftstars@qq.com>
LilyWakana <873435892@qq.com>
Liming Jin <jinlm@knownsec.com>
Liu Ya <liuya54892@gmail.com>
Liu Yang <zation1@gmail.com>
LongYinan <lynweklm@gmail.com>
Lucien Lee <lkiral7903@gmail.com>
Ludwig Bäcklund <ludli839@student.liu.se>
Lyndon001 <lld207@126.com>
M Mitchell <mail@megmitchell.ca>
MG12 <wuzhao.mail@gmail.com>
Ma Tianxiao <matx2215@outlook.com>
Maciej Czekaj <natanielcz@gmail.com>
Madis Väin <madisvain@gmail.com>
Maksym Mosyura <wmornotwm@gmail.com>
Malven <marcusalven@gmail.com>
Manjit Kumar <manjit1727@gmail.com>
Manweill <mic.liangwenwei@foxmail.com>
MaoYiWei <137308365@qq.com>
Marcel Jackwerth <marceljackwerth@gmail.com>
Marcela Bomfim <mbomfim@live.com>
Marcio Pamplona <marciopamplona79@gmail.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 Cermak <crudo@crudo.cz>
Martin Litvaj <kamahl19@gmail.com>
Martin Novák <martinnovak@outlook.com>
Mathew <khayaanimations@gmail.com>
Mathieu Anderson <anderson@talon.one>
Matias Orellana <morellan@gmail.com>
Matt Lein <matt.lein@code42.com>
Max <maksym.mosyura@kruschecompany.com>
Maximilian Meyer <Maximilian.Meyer@br.de>
Meck <yesmeck@gmail.com>
Meck Zhu <yesmeck@gmail.com>
MeiLin <postget.me@gmail.com>
Meow-z <372086270@qq.com>
Miaow <i@zfeng.net>
Michael Adams <mtadams007@gmail.com>
Michael Krog <mic@apaq.dk>
Michael Salaverry <barakplasma@gmail.com>
Michael Salaverry <michaels@axonize.com>
Michael Wang <ylzcylx@gmail.com>
Michal Pekar <pekac45@gmail.com>
Michalis Macheras <diodosier@gmail.com>
Michelle Zhang <michelle.chsy@gmail.com>
Mikasa33 <mikasa33@qq.com>
Min <dicklwm@163.com>
MinJeong Kim <min7859@gmail.com>
MinYuan <s1124yy@gmail.com>
Ming Hann <eldy8888@gmail.com>
Minqi Pan <pmq2001@gmail.com>
Minsung Ryu <ryums0227@gmail.com>
Minwei Xu <faceswilliam@gmail.com>
Mitchell Demler <mitchell.demler@harcourts.net>
Mohamed Seada <mohamed.seada.1994@gmail.com>
Mohammad Faisal <faisalhmohd@gmail.com>
Mohan Ban <banmohan@outlook.com>
Mounish Sai <pvsmounish@gmail.com>
Mr.Tone <vector@malubei.com>
MrHeer <hlm52pk@163.com>
MuYu <mr.muzea@gmail.com>
Mário Gonçalves <mario.mc.goncalves@gmail.com>
Nathan Broadbent <git@ndbroadbent.com>
@@ -298,6 +398,8 @@ Nekron <nekron.hyt@gmail.com>
Neverland <chenjiahan@buaa.edu.cn>
Nico <nicolas@freddelacompta.com>
Nidhi Agarwal <nidhi.agarwal@zomato.com>
Nihal Saxena <saxenanihal95@gmail.com>
Nikitenkova <katrin_7nes7@mail.ru>
Niko Autio <niko.autio@fenten.fi>
Nikolay <veseliy07@gmail.com>
Nikolay Solovyov <i@mr-ozio.ru>
@@ -306,8 +408,10 @@ Nimo <nimo.jser@gmail.com>
Nishant Arora <na.nishantarora@gmail.com>
Nokecy <Nokecy@163.com>
OAwan <georgio.wan@gmail.com>
Olaniyi Philip Ojeyinka <olaniyiojeyinka@gmail.com>
Oleg Kuzava <olegkuzava@gmail.com>
Oleksandr Kovalchuk <me.olexandr.kovalchuk@gmail.com>
Olivier Louvignes <olivier@mg-crea.com>
Ooi Yee Wei <ywooi@yahoo.com>
Open Next <opennext@126.com>
Oren Kosto <oren@panda-os.com>
@@ -320,16 +424,20 @@ Peter <usstpeter@gmail.com>
Peter Berg <atticusberg@gmail.com>
Phanupong Janthapoon <panupong.jtp@gmail.com>
Philip Oliver <philipodev@gmail.com>
Phyllis <escapiststupor@gmail.com>
Pierre <pierre@bazoge.com>
Pierre Neter <pierreneter@gmail.com>
Piotr Monwid-Olechnowicz <hasparus@gmail.com>
Piper Chester <piperchester@gmail.com>
Pixy Yuan <pixy.bupt@gmail.com>
Pooya Parsa <pyapar@gmail.com>
Pyiner <lijiuyang1992@gmail.com>
Pyroboomka <qwaarty@mail.ru>
QC-L <github@liqichang.com>
Qhan W <whenhan@foxmail.com>
Qiaosen Huang <joesonw@gmail.com>
Qingrong Ke <keqingrong1992@gmail.com>
Radomir Skrzepij <zyziu10@gmail.com>
Rafael Cosman <rafaelcosman@alumni.stanford.edu>
Rahul Gurung <gurungrahul2@gmail.com>
Rallets <rallet@rallets.com>
@@ -338,47 +446,70 @@ Ran Byron <ranbena@gmail.com>
Randy <randypriv@gmail.com>
RaoHai <surgesoft@gmail.com>
Raphael Chauveau <raph.chauveau@gmail.com>
Ray Booysen <ray.booysen@baikalmkt.com>
Ray Booysen <raybooysen@gmail.com>
Rayron Victor <rayronvictor@gmail.com>
Reed Sun <superreedsun@gmail.com>
Regan Langford <regan.reihana@gmail.com>
Renovate Bot <bot@renovateapp.com>
Rex <zhangzilong.zzl@163.com>
Ricardo Raphael Joson <rrjoson08@gmail.com>
Richard D. Worth <rdworth@gmail.com>
Rick Zhou <rinick@gmail.com>
Robert Wilkinson <wilkinson.robert.a@gmail.com>
Rodrigo Ehlers <rodrigoehlers@outlook.com>
Rohan Malhotra <rohan.root@gmail.com>
Rongjian Zhang <pd4d10@gmail.com>
Rrrandom <emanonhere@gmail.com>
RunningCoderLee <sprint_l@aliyun.com>
Rustin <rustin.liu@gmail.com>
Rustin-Liu <rustin.liu@gmail.com>
RyanHui <ryanhui1996@gmail.com>
SHEN Lin <shenlin192@gmail.com>
Sagar Jain <sagar7993@gmail.com>
Sakol Assawasagool <koobitor@gmail.com>
Salavat Gizatov <100ishundred@gmail.com>
Sam Chen <chenxsan@gmail.com>
Sam Lanning <sam@samlanning.com>
Sam Maxwell <sam@paybase.io>
Samuel Gaus <sam@gaus.co.uk>
Sanghyeon Lee <yongdamsh@gmail.com>
Sangle <whb97@163.com>
Sanjay Kumar <kris.gooner@gmail.com>
Sanjay Kumar <sk@tectusdreamlab.com>
Scott Sturgeon <scott@tugboatlogic.com>
Sean Lin <sean@ejoy.com>
Sean Sun <pinggodstudio@gmail.com>
Sean Willis <sean.willis@incorta.com>
Sebastian Blade <blade254353074@hotmail.com>
Sebastian Busch <mail@sebastian-bus.ch>
Sebastian Busch <s.busch@obg-gruppe.de>
Sebastian Busch <s.busch@qbus-enet.de>
Sergey Levkovich <gosu.87@mail.ru>
Sergey Volynkin <sergey.volynkin@akvelon.com>
Sergio Crisostomo <sergiosbox@gmail.com>
Sevak <shaderzak@gmail.com>
Shawn Sit <xueqingxiao@gmail.com>
ShiCheng <nnecec@outlook.com>
ShiTengFei <shitengfei@goyoo.com>
ShuYu Wang <andelf@gmail.com>
Shuai Chen <wasd2144@hotmail.com>
Shubham Kanodia <shubhamsizzles@gmail.com>
Shun <polytechnics.shun@gmail.com>
Shuvalov Anton <anton@shuvalov.info>
SimaQ <sima.zhang1990@gmail.com>
Simo Aleksandrov <simo3003@me.com>
Sivaraj S <sivaraj@sdev.in>
Sivaraj <contact@sdev.in>
SoraYama <sorayamahou@gmail.com>
Spencer <spjy@hawaii.edu>
Stanley Thijssen <stanley.thijssen@energybox.com>
Stanley Thijssen <stanley.thijssen@gmail.com>
Stephen Esser <Stephen.Esser@gmail.com>
Stevche Radevski <sradevski@live.com>
Subroto <shub1493biswas@gmail.com>
Sven Efftinge <sven.efftinge@typefox.io>
SylvanasGone <397009765@qq.com>
TTC <345866517@qq.com>
Tao <magicdawn@qq.com>
Tao Zhang <windse7en@gmail.com>
Taylor Sabell <taylorsabell@gmail.com>
@@ -387,18 +518,22 @@ Teng YANG <yangteng@me.com>
Tengjiao Cai <caitengjiao1987@gmail.com>
Terence <trence320@163.com>
The Rock <zhoguoxin@126.com>
Theo Satloff <1golfball@gmail.com>
Thibault Derousseaux <tde@activeviam.com>
Thiebaud Thomas <thiebaud.tom@gmail.com>
Thomas <tom@axisj.com>
Thomas Ladd <thomas.ladd@stackpath.com>
Tino D <ginodeis@gmail.com>
Tom Gao <tom@zoomsoft.cc>
Tom Xu <tom.xu@antcosa.com>
Tom Xu <ycxzhkx@gmail.com>
TomIsion <isiontom@gmail.com>
Tomás Francisco <mail@tomasfrancisco.com>
Tomáš Hylský <thylsky@gmail.com>
Tomáš Szabo <tomas.szabo@deftomat.com>
Trotyl Yu <trotyl@qq.com>
Troy Thompson <troynt@gmail.com>
TsesamLi <tsesamli17@gmail.com>
Tyler <chaotyler@gmail.com>
Ubaldo Quintana <blkdr@hotmail.com>
Vadim Macagon <vadim.macagon@gmail.com>
@@ -406,6 +541,8 @@ Valentin Vichnal <valentin@vichnal.com>
Van Nguyen <vnguyen94@gmail.com>
Vemund Santi <vemund@santi.no>
Vic <709147950@qq.com>
Victor Repkow <repkowvictor@gmail.com>
Vijay Thirugnanam <vijayst@gmail.com>
Vincent Zhang <vxzhong@qq.com>
Vitaliy Mazurenko <vitaliymazurenko@gmail.com>
ViviaRui <zr1450995198@163.com>
@@ -420,17 +557,23 @@ Warren Seymour <warren@fountainhead.tech>
Wei Zhu <yesmeck@gmail.com>
Wenchao Hu <zjuhwc@gmail.com>
Wendell <wendzhue@gmail.com>
Wensheng Xu <xws@superid.cn>
Will <will_workhard@163.com>
Will Chen <willchen90@gmail.com>
William Cai <williamcai@easyops.cn>
WingGao <wing.gao@live.com>
Wu Haotian <whtsky@gmail.com>
XBTop1! <xbtop1@gmail.com>
XTY <^@xty.dev>
Xiaoming <yokiming1994@gmail.com>
Xie Guanglei <xieguanglei@hotmail.com>
Xinxing Li <lixinxing.2019@bytedance.com>
Xiping.wang <527409987@qq.com>
XuMM_12 <owiatsq@sina.cn>
Yang <504021398@qq.com>
Yang Bin <yangkghjh@gmail.com>
Yangzhedi <uiryzd@163.com>
Yann Normand <yann.normand@gmail.com>
Yasin Uslu <nepjua@gmail.com>
Yevhen Hryhorevskyi <evgeniygrigorevskiy@gmail.com>
Yiming <ymjrcc@qq.com>
@@ -445,27 +588,36 @@ Yusuke Ito <novi.mad@gmail.com>
Yuwei Ba <i@xiaoba.me>
Yuxuan Huo <yuxuan.huo2011@gmail.com>
YuyingWu <wuyuying1128@gmail.com>
ZYSzys <zyszys98@gmail.com>
Zack Craig <zack@zack6849.com>
Zap <a124116186@qq.com>
Zhang Zhi <fytriht@gmail.com>
Zheeeng <hi@zheeeng.me>
Zhiqiang Gong <elory0513@hotmail.com>
Zhuo Chen <chenzhuo@caicloud.io>
Ziluo <gyfzzu@gmail.com>
Zohaib Ijaz <mzohaib.qc@gmail.com>
Zzzen <843968788@qq.com>
aashutoshrathi <aashutoshrathi@gmail.com>
adam <adamwu1992@163.com>
afc163 <afc163@gmail.com>
agent-z <1607291079@qq.com>
ahalimkara <ahalimkara@gmail.com>
alekslario <aleksandlario@gmail.com>
alex <379118572@qq.com>
alex89lj <379118572@qq.com>
alexchen <alexchen@easyops.cn>
amedora <americandragsterracing@gmail.com>
arifemrecelik <ce.arifemre@gmail.com>
ascoders <576625322@qq.com>
ashishg-qburst <ashishg@qburst.com>
atomoo <yangpein@gmail.com>
bLue <tbdblue@gmail.com>
babycannotsay <335658202@qq.com>
bang <sqibang@gmail.com>
bang88 <sqibang@gmail.com>
baozefeng <727751065@qq.com>
binyellow <571704908@qq.com>
blankzust <450811238@qq.com>
bukas <yhz1219@gmail.com>
byuanama <byuan@ama.com.au>
@@ -477,14 +629,22 @@ cathayandy <wzm_andy@126.com>
cc189 <cc189dev@gmail.com>
chaofeis <408067385@qq.com>
chchen <cc272309126@gmail.com>
chen shuai <qixian.cs@outlook.com>
chen wen jun <731028571@qq.com>
chencheng (云谦) <sorrycc@gmail.com>
chencheng <sorrycc@gmail.com>
chenlong <long.chen@abssqr.com>
chenshuai2144 <qixian.cs@outlook.com>
chisus <chisus@smartstudy.co.kr>
chunlea <ichunlea@me.com>
cjahv <cjahv@qq.com>
clinyong <clinyong@gmail.com>
cnjs <1269075501@qq.com>
codesign <zuishiguang@126.com>
corneyl <cornieljoosse@gmail.com>
damon.chen <chj_0507_dz@sina.com>
david.lv <code4funlnyx@gmail.com>
david.lv <lvdawei1970@gmail.com>
davidhatten <david.r.hatten@gmail.com>
ddcat1115 <ddcat1115@gmail.com>
decade <decadef20@gmail.com>
@@ -493,6 +653,7 @@ denzw <denzw@21cn.com>
dependabot[bot] <support@dependabot.com>
detailyang <detailyang@gmail.com>
devqin <devqin@gmail.com>
dian.li <dian.li@yunzhanghu.com>
digz6666 <digz6666@gmail.com>
djorkaeff <djorkae55@gmail.com>
duzliang <duzliang@gmail.com>
@@ -501,15 +662,21 @@ edgji <j.edgji@gmail.com>
eidonjoe <806488716@qq.com>
elios <elios264@hotmail.com>
elrrrrrrr <elrrrrrrr@gmail.com>
eruca <nickwill1984@126.com>
ezpub <ez.foro@gmail.com>
feng zhi hao <fzhihao@outlook.com>
fengmk2 <m@fengmk2.com>
fkysly <fkysly@gmail.com>
flashback313 <windmark2012@gmail.com>
frezc <504021398@qq.com>
genie <genie88@163.com>
gregahren <grega.hren@gmail.com>
guifu <picodoth@gmail.com>
gxvv <gaoxin18000@gmail.com>
gyh9457 <gyh9457@163.com>
haianweifeng <1531297152@qq.com>
haimrait <haimrait@gmail.com>
handy <lihandi@gmail.com>
handycode <lihandi@gmail.com>
hank <stonehank310@gmail.com>
hanpei <75189218@qq.com>
@@ -522,10 +689,13 @@ hengkx <ycxzhkx@gmail.com>
henryv0 <henryvo94@gmail.com>
hi-caicai <hi@cai-cai.me>
hongxuWei <hongxu.wei@outlook.com>
howard <geograous@126.com>
huangyan.py <huangyan.py@bytedance.com>
huishiyi <zhou1maple@gmail.com>
huzzbuzz <huzzbuzz@outlook.com>
iamcastelli <sowed@cyberdude.com>
iamkun <kunhello@outlook.com>
ikobe <ikobe621@gmail.com>
ilanus <hasanovtk@gmail.com>
imhele <work@imhele.com>
imosapatryk <imosa.patryk@gmail.com>
@@ -539,6 +709,7 @@ jasonslyvia <jasonslyvia@gmail.com>
jasonxia23 <xia.jason23@gmail.com>
jiajiangxu <minesaner@163.com>
jiang <155259966@qq.com>
jiang.an <jarancn@gmail.com>
jim <wasd2144@hotmail.com>
jinouwuque <ee2win@gmail.com>
jinyaqiao1102 <405782493@QQ.com>
@@ -547,13 +718,20 @@ junjing.zhang <zhangjunjing@gmail.com>
kacjay <45483388@qq.com>
kagawagao <kingsongao1221@gmail.com>
kaifei <150641329@qq.com>
kailunyao <kailunyao@163.com>
kanweiwei <475801900@qq.com>
kanweiwei <kwwnjujlc@sina.com>
kapiroska <etherreals777@gmail.com>
kasinooya <kasinooya@gmail.com>
kavin <kavin.huang@alphaliongroup.com>
kayw <kayw@outlook.com>
kdenz <ksnz93@gmail.com>
kdepp <kdepp.cd@gmail.com>
keng <keng@renderinghouse.com>
kenve <zwei.xie@gmail.com>
keqingrong <keqingrong1992@gmail.com>
kermolaev <kermolaev@cloudally.com>
klouskingsley <harry_tse@163.com>
ko <git@yaksok.net>
konakona <lovekonakona@gmail.com>
kossel <lis.yichao@gmail.com>
@@ -565,13 +743,18 @@ leadream <857098475@qq.com>
lehug <zcszuo5811@126.com>
leijingdao <leijingdao@163.com>
leon.shi <superRaytin@163.com>
lewis liu <897473127@qq.com>
lgmcolin <gengmin.lgm@gmail.com>
lgmcolin <lgmcolin@gmail.com>
lhx <liuhongxi0000@163.com>
lhyt <515593899@qq.com>
liangfei <njliangfei@gmail.com>
liekkas <zjq0717@163.com>
lihqi <455711093@qq.com>
lilun <lilun_cd@keruyun.com>
littleLane <857183384@qq.com>
liuchuzhang <liuweiminer@126.com>
liuchuzhang <liuweiminer@hotmail.com>
lixiaochou077 <qi.liqi07@gmail.com>
lixiaoyang <lixiaoyang2345@gmail.com>
lixiaoyang1992 <lixiaoyang2345@gmail.com>
@@ -580,16 +763,21 @@ lizhen <lizhen@youzan.com>
loganpowell <loganp@tepper.cmu.edu>
luyiming <luyimingchn@gmail.com>
lvren <luren6049@qq.com>
lxnxbnq <yuanddmail@163.com>
lyhper <lyhper@gmail.com>
mArker <252133226@qq.com>
maks <pine3ree@gmail.com>
maximest-pierre <me@maximest-pierre.me>
melchior voidwolf <kmno4k2mno4@gmail.com>
memoryza <jincai.wang@foxmail.com>
mgrdevport <mgrdevport@gmail.com>
mingyan.yu <mingyan.yu@wormpex.com>
mitchell.demler <mitchell.demler@harcourts.net>
mkermani144 <mkermani144@gmail.com>
mmmveggies <jakeselig@gmail.com>
mofelee <mofe@me.com>
monkindey <monkindey@163.com>
moonrailgun <moonrailgun@gmail.com>
mraiguo <810158465@qq.com>
mraiguo <mraiguo@gmail.com>
mushan0x0 <mushan0x0@gmail.com>
@@ -597,21 +785,27 @@ muzea <mr.muzea@gmail.com>
muzuiget <muzuiget@gmail.com>
natergj <nater_nater@me.com>
neekey <ni184775761@gmail.com>
ngolin <poodll@163.com>
nick-ChenZe <chenze2168@gmail.com>
niko <644506165@qq.com>
nikogu <644506165@qq.com>
nnecec <nnecec@outlook.com>
nuintun <nuintun@qq.com>
ohhoney1 <1269075501@qq.com>
oldchicken <www.chao3208525@qq.com>
orzorzorzorz <zy410419243@gmail.com>
orzyyyy <zy410419243@gmail.com>
paranoidjk <hust2012jiangkai@gmail.com>
parlop <parlop@gmail.com>
pbrink231 <pbrink231@gmail.com>
pd4d10 <pd4d10@gmail.com>
peiming <hyrijk@gmail.com>
pengtikui <949828390@qq.com>
picodoth <picodoth@gmail.com>
picodoth <pikaleize@gmail.com>
pinggod <pinggodstudio@gmail.com>
pizn <pizner@gmail.com>
plainnany <plainnany@gmail.com>
plandem <plandem@gmail.com>
popomore <sakura9515@gmail.com>
qiaojie <1454763497@qq.com>
@@ -620,14 +814,18 @@ qliu <1403927509@qq.com>
qubaoming <qubaoming@didichuxing.com>
ravirambles <ravirambles@gmail.com>
richardison <richard.ison@carleton.ca>
riho <873435892@qq.com>
ryangun <ryangun@foxmail.com>
ryanhoho <hswacoal@gmail.com>
ryannz <c5e1856@gmail.com>
sadmark <zhoubin@laidian360.com>
sallen450 <jqh101@sina.com>
saxenanihal95 <saxenanihal95@gmail.com>
sdli <1669375803@qq.com>
sfturing <sfturing@gmail.com>
shangyuan.ning <shangyuan.ning@manaowan.com>
shao <darryshaw@gmail.com>
shaodahong <darryshaw@gmail.com>
shawtung <shawtung@qq.com>
shelwin <wxfans@gmail.com>
shenlin192@gmail.com <shenlin192@gmail.com>
@@ -645,9 +843,11 @@ sosohime <theziming@126.com>
spideeee <spideeee@github.com>
stevenyuysy <stevenyuysy@gmail.com>
stickmy <stickmyc@gmail.com>
susiwen <susiwen8@gmail.com>
swindme <swindme@163.com>
sylvanasGone <397009765@qq.com>
syssam <s.y.s.sam.sys@gmail.com>
tangjinzhou <21251118@zju.edu.cn>
tangjinzhou <415800467@qq.com>
tangjinzhou <tangjinzhou@yidian-inc.com>
taoweicn <twchn@live.com>
@@ -655,52 +855,76 @@ thegatheringstorm <tgs@tgs.blue>
thilo-behnke <jan-thilo.behnke@gmx.de>
tianli.zhao <275287902@qq.com>
tom <caolvchong@gmail.com>
tom <gaoqiang19514@163.com>
toshi1127 <toshi.matsumoto.2n@stu.hosei.ac.jp>
twobin <twobin@live.com>
u3u <qwq@qwq.cat>
undefined <undefined>
unknown <chenyizhongx@gmail.com>
ustccjw <317713370@qq.com>
vagusX <vagusxl@gmail.com>
valleykid <valleykiddy@gmail.com>
vaytsel <vaytsel@gmail.com>
veveue <veveue@dingtalk.com>
vgeyi <vgeyiz@126.com>
wadezhan <wadezhan@tencent.com>
wangshantao <605682551@qq.com>
wangshuai <wangshuai@momenta.ai>
wangtao0101 <yuecjn@gmail.com>
wangxiaolei <fatelei@gmail.com>
wangxing <wangxing@nroad.com.cn>
wangxingkang <156148958@qq.com>
wangxingkang <wangxingkang@sensoro.com>
wangxueliang <wangxueliang@yidian-inc.com>
wanli <wanli@qunhemail.com>
warmhug <hualei5280@gmail.com>
wenhong <wenhong.zw@antfin.com>
whinc <whincwu@163.com>
whtang906 <whtang906@gmail.com>
willc001 <will.c001@163.com>
wizawu <wizawu@gmail.com>
wleven <408493323@qq.com>
wonyun <wy393767068@163.com>
woodsand <ballerpk70@gmail.com>
wtzeng1 <wentao_zeng1@163.com>
wwwxy <xiaowangziwxy@gmail.com>
wwwxy80s <xiaowangziwxy@gmail.com>
wx1322 <289758716@qq.com>
xiaofan2406 <xiaofan2406@gmail.com>
xiaohuoni <448627663@qq.com>
xrkffgg <xrkffgg@vip.qq.com>
xuqiang <xuqiang@xiaoshouyi.com>
y-take <y.takey@gmail.com>
yangwukang <yangwukang@boco.com.cn>
yangxiaolin <yangxiao2810279802@gmail.com>
ycjcl868 <45808948@qq.com>
ye4241 <ye4241@gmail.com>
yeliex <yeliex@yeliex.com>
yibu.wang <yibu.wang@orion.co.com>
yiminanci <yiminanci@gmail.com>
yiminghe <yiminghe@gmail.com>
yinjs <yinjiangsheng@gmail.com>
yociduo <yociduo@vip.qq.com>
yoyo837 <yoyo837@hotmail.com>
yubozhao <yubz86@gmail.com>
yuche <i@yuche.me>
yuezk <yuezk001@gmail.com>
z <haig8@msn.com>
zack <zxyah@126.com>
zefeng <zefengbao@outlook.com>
zelongc <nickcong123@gmail.com>
zerob4wl <zerob4wl@gmail.com>
zhangguanyu02 <zhangguanyu02@meituan.com>
zhangpc <zhangpc@tenxcloud.com>
zhangyangxue <383632607@qq.com>
zhangzh <zhangzh@cnlemon.net>
zhaocai <lzc09008@gmail.com>
zhaopeidong <lwindscar@gmail.com>
zhujun24 <zhujun87654321@gmail.com>
zhuyue <fuping.dfp@antfin.com>
zilong <jzlxiaohei@163.com>
zinkey <yaya@uloveit.com.cn>
zjf <zjffun@gmail.com>
zlljqn <zlljqn@gmail.com>
zollero <corona7@163.com>
zombieJ <smith3816@gmail.com>
@@ -708,22 +932,31 @@ zombiej <smith3816@gmail.com>
zongzi531 <zongzi.xy@gmail.com>
ztplz <mysticzt@gmail.com>
zuiidea <zuiiidea@gmail.com>
zx6658 <zx6658@naver.com>
zy410419243 <zy410419243@gmail.com>
zytjs <yitongzhao@163.com>
°))))彡 <fisherspy@live.com>
邦 <sqibang@gmail.com>
爱but的苍蝇 <354788473@qq.com>
Ștefan Filip <stefy.filip@gmail.com>
高力 <3071730@qq.com>
郑旭 <332171564@qq.com>
拷钉 <41830859@qq.com>
蒋璇 <645762213@qq.com>
苏秦 <646382806@qq.com>
陈杰 <810158465@qq.com>
竹尔 <Juelchiang@gmail.com>
偏右 <afc163@gmail.com>
黄斌 <bin.huang02@hand-china.com>
英布 <chaoren1641@gmail.com>
朮厃 <cn.ah.liu@gmail.com>
张聪 <dancerphil1994@gmail.com>
诸岳 <dengfuping_develop@163.com>
诸岳 <dengfuping_private@163.com>
逸达 <dqaria@gmail.com>
诸岳 <fuping.dfp@antfin.com>
啸生 <ikobe621@gmail.com>
迷渡 <justjavac@gmail.com>
二哲 <kodo@forchange.cn>
廖星 <liaoxing.lx@bytedance.com>
刘红 <liuhong1.happy@163.com>
@@ -736,6 +969,7 @@ zy410419243 <zy410419243@gmail.com>
松子 <window.pibarr@gmail.com>
何乐 <work@imhele.com>
付引 <xxxquotes@gmail.com>
萧琚 <yizhi.lyz@antfin.com>
可乐 <zaxlct@foxmail.com>
山客 <zeakhold@gmail.com>
曾凯 <zengkai2009@foxmail.com>
@@ -743,6 +977,8 @@ zy410419243 <zy410419243@gmail.com>
信鑫-King <45808948@qq.com>
广彬-梁 <326741518@qq.com>
小哈husky <951565664@qq.com>
诸葛龙 <158362530@qq.com>
李环冀 <158757774@qq.com>
何志勇 <15988134176@163.com>
徐坤龙 <272992168@qq.com>
黄子毅 <576625322@qq.com>
@@ -750,22 +986,27 @@ zy410419243 <zy410419243@gmail.com>
崔宏森 <948346354@qq.com>
黄文鉴 <concefly@foxmail.com>
董天成 <dongtiangche@outlook.com>
龚方闻 <fangwen.gong@baishancloud.com>
方剑成 <fjc0kb@gmail.com>
陈广亮 <geraldchen890806@gmail.com>
包子熊 <hezhiyu233@foxmail.com>
闲耘™ <hotoo.cn@gmail.com>
一喵呜 <hyb628@gmail.com>
王林涛 <hzwanglintao@corp.netease.com>
黄俊亮 <jayhuang@easyops.cn>
吕立青 <jimmy.jinglv@gmail.com>
隋鑫磊 <joshuasui@gmail.com>
米老朱 <laozhu.me@gmail.com>
刘宏玺 <liuhongxi0000@163.com>
乔奕轩 <qiao_yixuan@163.com>
马斯特 <sd4399340@126.com>
廖应龙 <vigossliao@gmail.com>
王集鹄 <wjhu111@21cn.com>
徐新航 <xuxinhang@bytedance.com>
杨哲迪 <yangzhedi@yidian-inc.com>
柚子男 <yozman@sina.com>
愚指导 <yutingzhao1991@sina.com>
只捱宅 <zy410419243@gmail.com>
郭延豪(708674) <gyh9457@163.com>
愚指导-TZ <yutingzhao1991@sina.com>
杨小事er <Uiryzd@163.com>
@@ -773,5 +1014,8 @@ zy410419243 <zy410419243@gmail.com>
超能刚哥 <margox@foxmail.com>
马金花儿 <o.o@mug.dog>
रोहन मल्होत्रा <rohan.malhotra@adwyze.com>
芝华塔尼欧 <1150974628@qq.com>
白羊座小葛 <abeyuhang@gmail.com>
薛定谔的猫 <hh_2013@foxmail.com>
二货机器人 <smith3816@gmail.com>
骗你是小猫咪 <darryshaw@gmail.com>

View File

@@ -15,6 +15,61 @@ timeline: true
---
## 3.26.8
`2020-02-03`
- 🐞 Fix Tooltip hidden when `title` is `0`. [#20894](https://github.com/ant-design/ant-design/pull/20894)
- 🐞 Fix List `actions` inconsistent position. [#20897](https://github.com/ant-design/ant-design/pull/20897)
- 🐞 Fix Card `font-size` of `actions` not in less theme variables. [#21106](https://github.com/ant-design/ant-design/pull/21106)
- 🐞 Fix Layout components `displayName`. [#21124](https://github.com/ant-design/ant-design/pull/21124)
- 🐞 Fix Modal.confirm `okButtonProps` and `cancelButtonProps` interface. [#21165](https://github.com/ant-design/ant-design/pull/21165)
## 3.26.7
`2020-01-13`
- 💄 Optimize Table fixed columns blank problem in some case. [#20821](https://github.com/ant-design/ant-design/pull/20821) [@AshoneA](https://github.com/AshoneA)
- 🐞 Fix Tree `switcherIcon` shown in leaf node problem. [#20753](https://github.com/ant-design/ant-design/pull/20753)
- 🐞 Fix Badge `z-index` higher than Table fixed columns. [#20751](https://github.com/ant-design/ant-design/pull/20751)
- 🐞 Fix Cascader search bug when `fieldNames` is existed and label/value share same name. [#20720](https://github.com/ant-design/ant-design/pull/20720)
- 🐞 Fix Collapse background color with wrong less variable. [#20718](https://github.com/ant-design/ant-design/pull/20718) [@kuitos](https://github.com/kuitos)
- 🐞 Fix Input.Group inside `<Form layout="vertical" >` 1px bug. [#20685](https://github.com/ant-design/ant-design/pull/20685)
## 3.26.6
`2020-01-03`
- 📢 v3 branch changes from `master` to `3.x-stable` and v4 merge into `master`.
- 💄 Improve Steps `type="navigation"` UI in small screen. [#20545](https://github.com/ant-design/ant-design/pull/20545)
- 🐞 Fix `message.xxx` pass `null` will failed. [#20546](https://github.com/ant-design/ant-design/pull/20546)
- 🐞 Remove Input.Password `value` attribute from dom. [#20544](https://github.com/ant-design/ant-design/pull/20544)
## 3.26.5
`2019-12-29`
- Table
- 🐞 Revert the logic of return fisrt page by default after sort. [#20507](https://github.com/ant-design/ant-design/pull/20507)
- 🐞 Fix header wrong text align when `colspan=1`. [#20463](https://github.com/ant-design/ant-design/pull/20463)
- 🐞 Fix Tabs ink bar disappearing when `animated` prop is false. [#20417](https://github.com/ant-design/ant-design/pull/20417) [@xrkffgg](https://github.com/xrkffgg)
- 🐞 Fix Tree wrong indent. [#20456](https://github.com/ant-design/ant-design/pull/20456)
## 3.26.4
`2019-12-22`
- 💄 Optimize Steps `subTitle` UI when `labelPlacement="vertical"`. [#20325](https://github.com/ant-design/ant-design/pull/20325)
- 🐞 Fix upload preview not support ico file type issue. [#20375](https://github.com/ant-design/ant-design/pull/20375) [@Rustin-Liu](https://github.com/Rustin-Liu)
- 🐞 Fix Form feedback icon combine Input `suffix` display not correct. [#20363](https://github.com/ant-design/ant-design/pull/20363)
- 🐞 Fix Tag `onClick` been triggered when close it. [#20355](https://github.com/ant-design/ant-design/pull/20355)
- 🐞 Fix Cascader component form check color trigger issue. [#20347](https://github.com/ant-design/ant-design/pull/20347) [@xrkffgg](https://github.com/xrkffgg)
- 🐞 Disallow auto focus input after triggering `onSearch` event in mobile and tablet devices. [#20332](https://github.com/ant-design/ant-design/pull/20332) [@YaoKaiLun](https://github.com/YaoKaiLun)
- 🐞 Fix Tabs ink bar missing transition animation. [#20283](https://github.com/ant-design/ant-design/pull/20283)
- 🐞 Fix TreeNode without `icon` show white block in `showIcon` mode. [#20274](https://github.com/ant-design/ant-design/pull/20274)
- TypeScript
- ⚡️ Update filters define in Table `onChange`. [#20337](https://github.com/ant-design/ant-design/pull/20337) [@MrHeer](https://github.com/MrHeer)
## 3.26.3
`2019-12-14`

View File

@@ -15,6 +15,61 @@ timeline: true
---
## 3.26.8
`2020-02-03`
- 🐞 修复 Tooltip `title``0` 时没有显示的问题。[#20894](https://github.com/ant-design/ant-design/pull/20894)
- 🐞 修复 List `actions` 位置不在右边的问题。[#20897](https://github.com/ant-design/ant-design/pull/20897)
- 🐞 修复 Card `actions` 字体大小不受 less 变量影响的问题。[#21106](https://github.com/ant-design/ant-design/pull/21106)
- 🐞 修正 Layout 各组件的 `displayName`。[#21124](https://github.com/ant-design/ant-design/pull/21124)
- 🐞 优化 Modal.confirm 的 `okButtonProps``cancelButtonProps` 的 TypeScript 类型。[#21165](https://github.com/ant-design/ant-design/pull/21165)
## 3.26.7
`2020-01-13`
- 💄 优化 Table 固定列在某些情况下出现空白间隔的问题。[#20821](https://github.com/ant-design/ant-design/pull/20821) [@AshoneA](https://github.com/AshoneA)
- 🐞 修复 Tree `switcherIcon` 在叶子节点上展示的问题。[#20753](https://github.com/ant-design/ant-design/pull/20753)
- 🐞 修复 Badge 在 Table 固定列中穿透的问题。[#20751](https://github.com/ant-design/ant-design/pull/20751)
- 🐞 修复 Cascader `fieldNames` 中 label 和 value 共用一个值时搜索功能失效的问题。[#20720](https://github.com/ant-design/ant-design/pull/20720)
- 🐞 修复 Collapse 背景使用错误的 less 变量。[#20718](https://github.com/ant-design/ant-design/pull/20718) [@kuitos](https://github.com/kuitos)
- 🐞 修复 `<Form layout="vertical" >` 内 Input.Group 偏上一像素的问题。[#20685](https://github.com/ant-design/ant-design/pull/20685)
## 3.26.6
`2020-01-03`
- 📢 v3 分支由 `master` 进入 `3.x-stable`v4 合入 `master`
- 💄 优化 Steps `type="navigation"` 在小屏幕下的样式。[#20545](https://github.com/ant-design/ant-design/pull/20545)
- 🐞 修复 `message.xxx` 传入 `null` 会报错的问题。[#20546](https://github.com/ant-design/ant-design/pull/20546)
- 🐞 优化 Input.Password 在 dom 中明文显示 `value` 属性的问题。[#20544](https://github.com/ant-design/ant-design/pull/20544)
## 3.26.5
`2019-12-29`
- Table
- 🐞 回滚排序后默认回到第一页的逻辑。[#20507](https://github.com/ant-design/ant-design/pull/20507)
- 🐞 修复分组列头在 `colspan=1` 时文本没有对齐的问题。[#20463](https://github.com/ant-design/ant-design/pull/20463)
- 🐞 修复 Tabs 的 `animated` 属性为 false 时,高亮条消失的问题。[#20417](https://github.com/ant-design/ant-design/pull/20417) [@xrkffgg](https://github.com/xrkffgg)
- 🐞 修复 Tree 节点缩进不正确的问题。[#20456](https://github.com/ant-design/ant-design/pull/20456)
## 3.26.4
`2019-12-22`
- 💄 优化 Steps `subTitle``labelPlacement="vertical"` 下的展现方式。[#20325](https://github.com/ant-design/ant-design/pull/20325)
- 🐞 修复 Upload 组件预览不支持 `.ico` 文件问题。[#20375](https://github.com/ant-design/ant-design/pull/20375) [@Rustin-Liu](https://github.com/Rustin-Liu)
- 🐞 修复 Form feedback 图标结合 Input `suffix` 显示不正确。[#20363](https://github.com/ant-design/ant-design/pull/20363)
- 🐞 修复 Tag 关闭时 `onClick` 被触发的问题。[#20355](https://github.com/ant-design/ant-design/pull/20355)
- 🐞 修复 Cascader 组件 Form 校验触发时,鼠标悬浮显示颜色问题。[#20347](https://github.com/ant-design/ant-design/pull/20347) [@xrkffgg](https://github.com/xrkffgg)
- 🐞 修复移动端点击搜索后,自动聚焦输入框,导致弹出键盘的问题。[#20332](https://github.com/ant-design/ant-design/pull/20332) [@YaoKaiLun](https://github.com/YaoKaiLun)
- 🐞 修复 Tabs 高亮条宽度的 `transition` 过度动画失效的问题。[#20283](https://github.com/ant-design/ant-design/pull/20283)
- 🐞 修复 TreeNode 不设置 `icon` 时会展示一个空白占位的问题。[#20274](https://github.com/ant-design/ant-design/pull/20274)
- TypeScript
- ⚡️ 更新 Table `onChange``filters` 的定义。[#20337](https://github.com/ant-design/ant-design/pull/20337) [@MrHeer](https://github.com/MrHeer)
## 3.26.3
`2019-12-14`

View File

@@ -24,10 +24,12 @@
## ✨ 特性
- 提炼自企业级中后台产品的交互语言和视觉风格。
- 开箱即用的高质量 React 组件。
- 使用 TypeScript 构建,提供完整的类型定义文件。
- 全链路开发和设计工具体系。
- 🌈 提炼自企业级中后台产品的交互语言和视觉风格。
- 📦 开箱即用的高质量 React 组件。
- 🛡 使用 TypeScript 开发,提供完整的类型定义文件。
- ⚙️ 全链路开发和设计工具体系。
- 🌍 数十个国际化语言支持。
- 🎨 深入每个细节的主题定制能力。
## 🖥 支持环境
@@ -51,20 +53,25 @@ yarn add antd
## 🔨 示例
```jsx
import { DatePicker } from 'antd';
ReactDOM.render(<DatePicker />, mountNode);
```
````jsx
import { Button, DatePicker } from 'antd';
const App = () => (
<>
<Button type="primary">PRESS ME</Button>
<DatePicker />
</>
);
引入样式:
```jsx
import 'antd/dist/antd.css'; // or 'antd/dist/antd.less'
```
````
你也可以 [按需加载组件](https://ant.design/docs/react/getting-started-cn#按需加载)。
你也可以使用 [babel-plugin-import](https://ant.design/docs/react/getting-started-cn#按需加载)。
### TypeScript
### 🛡 TypeScript
参考 [在 TypeScript 中使用](https://ant.design/docs/react/use-in-typescript-cn)
@@ -121,7 +128,7 @@ $ npm start
[![Let's fund issues in this repository](https://issuehunt.io/static/embed/issuehunt-button-v1.svg)](https://issuehunt.io/repos/34526884)
## 社区互助
## 👥 社区互助
如果您在使用的过程中碰到问题,可以通过下面几个途径寻求帮助,同时我们也鼓励资深用户通过下面的途径给新人提供帮助。

View File

@@ -24,10 +24,12 @@ English | [简体中文](./README-zh_CN.md)
## ✨ Features
- An enterprise-class UI design system for web applications.
- A set of high-quality React components out of the box.
- Written in TypeScript with predictable static types.
- The whole package of development and design resources and tools.
- 🌈 Enterprise-class UI designed for web applications.
- 📦 A set of high-quality React components out of the box.
- 🛡 Written in TypeScript with predictable static types.
- ⚙️ Whole package of design resources and development tools.
- 🌍 Internationalization support for dozens of languages.
- 🎨 Powerful theme customization in every detail.
## 🖥 Environment Support
@@ -36,8 +38,8 @@ English | [简体中文](./README-zh_CN.md)
- [Electron](http://electron.atom.io/)
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Opera | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Electron |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| IE9, IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
| --- | --- | --- | --- | --- | --- |
| IE9, IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
## 📦 Install
@@ -52,17 +54,23 @@ yarn add antd
## 🔨 Usage
```jsx
import { DatePicker } from "antd";
ReactDOM.render(<DatePicker />, mountNode);
import { Button, DatePicker } from 'antd';
const App = () => (
<>
<Button type="primary">PRESS ME</Button>
<DatePicker />
</>
);
```
And import style manually:
```jsx
import "antd/dist/antd.css"; // or 'antd/dist/antd.less'
import 'antd/dist/antd.css'; // or 'antd/dist/antd.less'
```
Or [import components on demand](https://ant.design/docs/react/getting-started#Import-on-Demand).
Or use [babel-plugin-import](https://ant.design/docs/react/getting-started#Import-on-Demand).
### TypeScript

View File

@@ -32,7 +32,7 @@ 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}> | - | |
| tabBarExtraContent | Extra content in tab bar | React.ReactNode | - | |
| tabBarExtraContent | Extra content in tab bar | React.ReactNode | - | 3.23.0 |
| size | Size of card | `default` \| `small` | `default` | 3.12.0 |
| title | Card title | string\|ReactNode | - | |
| type | Card style type, can be set to `inner` or not set | string | - | |

View File

@@ -33,7 +33,7 @@ cols: 1
| hoverable | 鼠标移过时可浮起 | boolean | false | |
| loading | 当卡片内容还在加载中时,可以用 loading 展示一个占位 | boolean | false | |
| tabList | 页签标题列表 | Array&lt;{key: string, tab: ReactNode}> | - | |
| tabBarExtraContent | tab bar 上额外的元素 | React.ReactNode | 无 | |
| tabBarExtraContent | tab bar 上额外的元素 | React.ReactNode | 无 | 3.23.0 |
| size | card 的尺寸 | `default` \| `small` | `default` | 3.12.0 |
| title | 卡片标题 | string\|ReactNode | - | |
| type | 卡片类型,可设置为 `inner` 或 不设置 | string | - | |

View File

@@ -144,7 +144,7 @@
position: relative;
display: block;
min-width: 32px;
font-size: 14px;
font-size: @font-size-base;
line-height: 22px;
cursor: pointer;

View File

@@ -839,6 +839,7 @@ exports[`Cascader should highlight keyword and filter when search in Cascader 1`
Object {
"__IS_FILTERED_OPTION": true,
"disabled": false,
"isEmptyNode": true,
"label": Array [
"Jiangsu",
Array [
@@ -891,6 +892,7 @@ exports[`Cascader should highlight keyword and filter when search in Cascader 1`
Object {
"__IS_FILTERED_OPTION": true,
"disabled": false,
"isEmptyNode": true,
"label": Array [
"Zhejiang",
Array [
@@ -1025,6 +1027,49 @@ exports[`Cascader should highlight keyword and filter when search in Cascader 1`
</Popup>
`;
exports[`Cascader should highlight keyword and filter when search in Cascader with same field name of label and value 1`] = `
<div>
<div
class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft slide-up-appear"
style="left: -999px; top: -995px;"
>
<div>
<ul
class="ant-cascader-menu"
style="width: 0px;"
>
<li
class="ant-cascader-menu-item"
role="menuitem"
title=""
>
Zhejiang / Hang
<span
class="ant-cascader-menu-item-keyword"
>
z
</span>
hou / West Lake
</li>
<li
class="ant-cascader-menu-item ant-cascader-menu-item-disabled"
role="menuitem"
title=""
>
Zhejiang / Hang
<span
class="ant-cascader-menu-item-keyword"
>
z
</span>
hou / Xia Sha
</li>
</ul>
</div>
</div>
</div>
`;
exports[`Cascader should render not found content 1`] = `
<Popup
action={
@@ -1242,6 +1287,7 @@ exports[`Cascader should render not found content 1`] = `
Array [
Object {
"disabled": true,
"isEmptyNode": true,
"label": <Context.Consumer>
[Function]
</Context.Consumer>,
@@ -1569,6 +1615,7 @@ exports[`Cascader should show not found content when options.length is 0 1`] = `
Array [
Object {
"disabled": true,
"isEmptyNode": true,
"label": <Context.Consumer>
[Function]
</Context.Consumer>,

View File

@@ -205,6 +205,52 @@ describe('Cascader', () => {
expect(popupWrapper).toMatchSnapshot();
});
it('should highlight keyword and filter when search in Cascader with same field name of label and value', () => {
const customOptions = [
{
name: 'Zhejiang',
value: 'Zhejiang',
children: [
{
name: 'Hangzhou',
value: 'Hangzhou',
children: [
{
name: 'West Lake',
value: 'West Lake',
},
{
name: 'Xia Sha',
value: 'Xia Sha',
disabled: true,
},
],
},
],
},
];
function customFilter(inputValue, path) {
return path.some(option => option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1);
}
const wrapper = mount(
<Cascader
options={customOptions}
fieldNames={{ label: 'name', value: 'name' }}
showSearch={{ filter: customFilter }}
/>,
);
wrapper.find('input').simulate('click');
wrapper.find('input').simulate('change', { target: { value: 'z' } });
expect(wrapper.state('inputValue')).toBe('z');
const popupWrapper = mount(
wrapper
.find('Trigger')
.instance()
.getComponent(),
);
expect(popupWrapper.render()).toMatchSnapshot();
});
it('should render not found content', () => {
const wrapper = mount(<Cascader options={options} showSearch={{ filter }} />);
wrapper.find('input').simulate('click');

View File

@@ -397,17 +397,19 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
return {
__IS_FILTERED_OPTION: true,
path,
[names.label]: render(inputValue, path, prefixCls, names),
[names.value]: path.map((o: CascaderOptionType) => o[names.value]),
[names.label]: render(inputValue, path, prefixCls, names),
disabled: path.some((o: CascaderOptionType) => !!o.disabled),
isEmptyNode: true,
} as CascaderOptionType;
});
}
return [
{
[names.label]: notFoundContent || renderEmpty('Cascader'),
[names.value]: 'ANT_CASCADER_NOT_FOUND',
[names.label]: notFoundContent || renderEmpty('Cascader'),
disabled: true,
isEmptyNode: true,
},
];
}
@@ -503,9 +505,10 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
} else {
options = [
{
[names.label]: notFoundContent || renderEmpty('Cascader'),
[names.value]: 'ANT_CASCADER_NOT_FOUND',
[names.label]: notFoundContent || renderEmpty('Cascader'),
disabled: true,
isEmptyNode: true,
},
];
}
@@ -517,8 +520,7 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
}
const dropdownMenuColumnStyle: { width?: number; height?: string } = {};
const isNotFound =
(options || []).length === 1 && options[0][names.value] === 'ANT_CASCADER_NOT_FOUND';
const isNotFound = (options || []).length === 1 && options[0].isEmptyNode;
if (isNotFound) {
dropdownMenuColumnStyle.height = 'auto'; // Height of one row.
}

View File

@@ -102,7 +102,7 @@
}
&-borderless {
background-color: @component-background;
background-color: @collapse-header-bg;
border: 0;
}

View File

@@ -8617,7 +8617,7 @@ exports[`ConfigProvider components Pagination configProvider 1`] = `
<div
class="config-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -8753,7 +8753,7 @@ exports[`ConfigProvider components Pagination configProvider 1`] = `
<div
class="config-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -8894,7 +8894,7 @@ exports[`ConfigProvider components Pagination normal 1`] = `
<div
class="ant-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -9030,7 +9030,7 @@ exports[`ConfigProvider components Pagination normal 1`] = `
<div
class="ant-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -9171,7 +9171,7 @@ exports[`ConfigProvider components Pagination prefixCls 1`] = `
<div
class="prefix-Pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -9307,7 +9307,7 @@ exports[`ConfigProvider components Pagination prefixCls 1`] = `
<div
class="prefix-Pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -12751,7 +12751,6 @@ Array [
>
<input
class="config-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -13842,7 +13841,6 @@ Array [
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -14933,7 +14931,6 @@ Array [
>
<input
class="prefix-TimePicker-input"
id=""
placeholder="Select time"
type="text"
value=""

View File

@@ -127,7 +127,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
| 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](#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | \[moment(), moment()] | |
| value | to set date | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | - | |
| onCalendarChange | a callback function, can be executed when the start time or the end time of the range is changing | function(dates: \[moment, moment], dateStrings: \[string, string]) | - | 3.10.9 |
| onCalendarChange | a callback function, can be executed when the start time or the end time of the range is changing | function(dates: \[moment, moment]) | - | 3.0.0 |
| onChange | a callback function, can be executed when the selected time is changing | function(dates: \[moment, moment], dateStrings: \[string, string]) | - | |
| onOk | callback when click ok button | function(dates: [moment](http://momentjs.com/)\[]) | - | |

View File

@@ -129,7 +129,7 @@ moment.locale('zh-cn');
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker/#API) | |
| showTime.defaultValue | 设置用户选择日期时默认的时分秒,[例子](#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | \[moment(), moment()] | |
| value | 日期 | [moment](http://momentjs.com/)\[] | 无 | |
| onCalendarChange | 待选日期发生变化的回调 | function(dates: \[moment, moment\], dateStrings: \[string, string\]) | 无 | |
| onCalendarChange | 待选日期发生变化的回调 | function(dates: \[moment, moment\]) | 无 | 3.0.0 |
| onChange | 日期范围发生变化的回调 | function(dates: \[moment, moment\], dateStrings: \[string, string\]) | 无 | |
| onOk | 点击确定按钮的回调 | function(dates: [moment](http://momentjs.com/)\[]) | - | |

View File

@@ -1,7 +1,7 @@
---
category: Components
type: Data Display
title: Description List
title: Descriptions
cols: 1
---

View File

@@ -4608,7 +4608,6 @@ exports[`renders ./components/form/demo/validate-static.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -5134,6 +5133,242 @@ exports[`renders ./components/form/demo/validate-static.md correctly 1`] = `
</div>
</div>
</div>
<div
class="ant-row ant-form-item"
>
<div
class="ant-col ant-form-item-label ant-col-xs-24 ant-col-sm-5"
>
<label
class=""
title="Success"
>
Success
</label>
</div>
<div
class="ant-col ant-form-item-control-wrapper ant-col-xs-24 ant-col-sm-12"
>
<div
class="ant-form-item-control has-feedback has-success"
>
<span
class="ant-form-item-children"
>
<span
class="ant-input-affix-wrapper"
>
<input
class="ant-input"
placeholder="with allowClear"
type="text"
value=""
/>
<span
class="ant-input-suffix"
/>
</span>
<span
class="ant-form-item-children-icon"
>
<i
aria-label="icon: check-circle"
class="anticon anticon-check-circle"
>
<svg
aria-hidden="true"
class=""
data-icon="check-circle"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 0 1-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"
/>
</svg>
</i>
</span>
</span>
</div>
</div>
</div>
<div
class="ant-row ant-form-item"
>
<div
class="ant-col ant-form-item-label ant-col-xs-24 ant-col-sm-5"
>
<label
class=""
title="Warning"
>
Warning
</label>
</div>
<div
class="ant-col ant-form-item-control-wrapper ant-col-xs-24 ant-col-sm-12"
>
<div
class="ant-form-item-control has-feedback has-warning"
>
<span
class="ant-form-item-children"
>
<span
class="ant-input-password ant-input-affix-wrapper"
>
<input
action="click"
class="ant-input"
placeholder="with input password"
type="password"
value=""
/>
<span
class="ant-input-suffix"
>
<i
aria-label="icon: eye-invisible"
class="anticon anticon-eye-invisible ant-input-password-icon"
tabindex="-1"
>
<svg
aria-hidden="true"
class=""
data-icon="eye-invisible"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 0 0 0-51.5zm-63.57-320.64L836 122.88a8 8 0 0 0-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 0 0 0 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 0 0 0 11.31L155.17 889a8 8 0 0 0 11.31 0l712.15-712.12a8 8 0 0 0 0-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 0 0-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 0 1 146.2-106.69L401.31 546.2A112 112 0 0 1 396 512z"
/>
<path
d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 0 0 227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 0 1-112 112z"
/>
</svg>
</i>
</span>
</span>
<span
class="ant-form-item-children-icon"
>
<i
aria-label="icon: exclamation-circle"
class="anticon anticon-exclamation-circle"
>
<svg
aria-hidden="true"
class=""
data-icon="exclamation-circle"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z"
/>
</svg>
</i>
</span>
</span>
</div>
</div>
</div>
<div
class="ant-row ant-form-item"
>
<div
class="ant-col ant-form-item-label ant-col-xs-24 ant-col-sm-5"
>
<label
class=""
title="Error"
>
Error
</label>
</div>
<div
class="ant-col ant-form-item-control-wrapper ant-col-xs-24 ant-col-sm-12"
>
<div
class="ant-form-item-control has-feedback has-error"
>
<span
class="ant-form-item-children"
>
<span
class="ant-input-password ant-input-affix-wrapper"
>
<input
action="click"
class="ant-input"
placeholder="with input password and allowClear"
type="password"
value=""
/>
<span
class="ant-input-suffix"
>
<i
aria-label="icon: eye-invisible"
class="anticon anticon-eye-invisible ant-input-password-icon"
tabindex="-1"
>
<svg
aria-hidden="true"
class=""
data-icon="eye-invisible"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 0 0 0-51.5zm-63.57-320.64L836 122.88a8 8 0 0 0-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 0 0 0 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 0 0 0 11.31L155.17 889a8 8 0 0 0 11.31 0l712.15-712.12a8 8 0 0 0 0-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 0 0-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 0 1 146.2-106.69L401.31 546.2A112 112 0 0 1 396 512z"
/>
<path
d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 0 0 227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 0 1-112 112z"
/>
</svg>
</i>
</span>
</span>
<span
class="ant-form-item-children-icon"
>
<i
aria-label="icon: close-circle"
class="anticon anticon-close-circle"
>
<svg
aria-hidden="true"
class=""
data-icon="close-circle"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 0 1-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z"
/>
</svg>
</i>
</span>
</span>
</div>
</div>
</div>
</form>
`;

View File

@@ -22,7 +22,7 @@ function hasErrors(fieldsError) {
class HorizontalLoginForm extends React.Component {
componentDidMount() {
// To disabled submit button at the beginning.
// To disable submit button at the beginning.
this.props.form.validateFields();
}

View File

@@ -119,6 +119,18 @@ ReactDOM.render(
<Form.Item label="Success" hasFeedback validateStatus="success">
<InputNumber style={{ width: '100%' }} />
</Form.Item>
<Form.Item label="Success" hasFeedback validateStatus="success">
<Input allowClear placeholder="with allowClear" />
</Form.Item>
<Form.Item label="Warning" hasFeedback validateStatus="warning">
<Input.Password placeholder="with input password" />
</Form.Item>
<Form.Item label="Error" hasFeedback validateStatus="error">
<Input.Password allowClear placeholder="with input password and allowClear" />
</Form.Item>
</Form>,
mountNode,
);

View File

@@ -137,16 +137,22 @@
form {
.has-feedback {
.@{ant-prefix}-input {
padding-right: 24px;
padding-right: @input-padding-horizontal-base + @input-affix-width;
}
// https://github.com/ant-design/ant-design/issues/19884
.@{ant-prefix}-input-affix-wrapper .@{ant-prefix}-input-suffix {
padding-right: 18px;
}
.@{ant-prefix}-input-password-icon {
margin-right: 18px;
.@{ant-prefix}-input-affix-wrapper {
.@{ant-prefix}-input-suffix {
padding-right: 18px;
}
.@{ant-prefix}-input {
padding-right: @input-padding-horizontal-base + @input-affix-width * 2;
}
&.@{ant-prefix}-input-affix-wrapper-input-with-clear-btn {
.@{ant-prefix}-input {
padding-right: @input-padding-horizontal-base + @input-affix-width * 3;
}
}
}
// Fix overlapping between feedback icon and <Select>'s arrow.
@@ -256,11 +262,18 @@ form {
// fix input with addon position. https://github.com/ant-design/ant-design/issues/8243
:not(.@{ant-prefix}-input-group-wrapper) > .@{ant-prefix}-input-group,
.@{ant-prefix}-input-group-wrapper {
position: relative;
top: -1px;
display: inline-block;
vertical-align: middle;
}
// https://github.com/ant-design/ant-design/issues/20616
&:not(.@{form-prefix-cls}-vertical) {
:not(.@{ant-prefix}-input-group-wrapper) > .@{ant-prefix}-input-group,
.@{ant-prefix}-input-group-wrapper {
position: relative;
top: -1px;
}
}
}
// Form layout
@@ -453,8 +466,13 @@ form {
}
}
.@{ant-prefix}-cascader-picker:focus .@{ant-prefix}-cascader-input {
.active(@warning-color);
.@{ant-prefix}-cascader-picker {
&:focus .@{ant-prefix}-cascader-input {
.active(@warning-color);
}
&:hover .@{ant-prefix}-cascader-input {
border-color: @warning-color;
}
}
}
@@ -527,8 +545,13 @@ form {
}
}
.@{ant-prefix}-cascader-picker:focus .@{ant-prefix}-cascader-input {
.active(@error-color);
.@{ant-prefix}-cascader-picker {
&:focus .@{ant-prefix}-cascader-input {
.active(@error-color);
}
&:hover .@{ant-prefix}-cascader-input {
border-color: @error-color;
}
}
// transfer

View File

@@ -17,7 +17,7 @@ export const InputSizes = tuple('small', 'default', 'large');
export interface InputProps
extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
prefixCls?: string;
size?: (typeof InputSizes)[number];
size?: typeof InputSizes[number];
onPressEnter?: React.KeyboardEventHandler<HTMLInputElement>;
addonBefore?: React.ReactNode;
addonAfter?: React.ReactNode;
@@ -61,7 +61,7 @@ export function resolveOnChange(
export function getInputClassName(
prefixCls: string,
size?: (typeof InputSizes)[number],
size?: typeof InputSizes[number],
disabled?: boolean,
) {
return classNames(prefixCls, {
@@ -114,6 +114,8 @@ class Input extends React.Component<InputProps, InputState> {
clearableInput: ClearableLabeledInput;
removePasswordTimeout: number;
constructor(props: InputProps) {
super(props);
const value = typeof props.value === 'undefined' ? props.defaultValue : props.value;
@@ -131,6 +133,10 @@ class Input extends React.Component<InputProps, InputState> {
return null;
}
componentDidMount() {
this.clearPasswordValueAttribute();
}
// Since polyfill `getSnapshotBeforeUpdate` need work with `componentDidUpdate`.
// We keep an empty function here.
componentDidUpdate() {}
@@ -146,6 +152,12 @@ class Input extends React.Component<InputProps, InputState> {
return null;
}
componentWillUnmount() {
if (this.removePasswordTimeout) {
clearTimeout(this.removePasswordTimeout);
}
}
focus() {
this.input.focus();
}
@@ -209,8 +221,21 @@ class Input extends React.Component<InputProps, InputState> {
);
};
clearPasswordValueAttribute = () => {
// https://github.com/ant-design/ant-design/issues/20541
this.removePasswordTimeout = setTimeout(() => {
if (
this.input &&
this.input.getAttribute('type') === 'password' &&
this.input.hasAttribute('value')
) {
this.input.removeAttribute('value');
}
});
};
handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
this.setValue(e.target.value);
this.setValue(e.target.value, this.clearPasswordValueAttribute);
resolveOnChange(this.input, e, this.props.onChange);
};

View File

@@ -33,7 +33,7 @@ export default class Password extends React.Component<PasswordProps, PasswordSta
visible: false,
};
onChange = () => {
onVisibleChange = () => {
const { disabled } = this.props;
if (disabled) {
return;
@@ -46,7 +46,7 @@ export default class Password extends React.Component<PasswordProps, PasswordSta
const { prefixCls, action } = this.props;
const iconTrigger = ActionMap[action!] || '';
const iconProps = {
[iconTrigger]: this.onChange,
[iconTrigger]: this.onVisibleChange,
className: `${prefixCls}-icon`,
type: this.state.visible ? 'eye' : 'eye-invisible',
key: 'passwordIcon',

View File

@@ -1,5 +1,6 @@
import * as React from 'react';
import classNames from 'classnames';
import { isMobile } from 'is-mobile';
import Input, { InputProps } from './Input';
import Icon from '../icon';
import Button from '../button';
@@ -47,7 +48,10 @@ export default class Search extends React.Component<SearchProps, any> {
if (onSearch) {
onSearch(this.input.input.value, e);
}
this.input.focus();
if (!isMobile({ tablet: true })) {
this.input.focus();
}
};
focus() {

View File

@@ -4,6 +4,7 @@ import { mount } from 'enzyme';
import Input from '..';
import focusTest from '../../../tests/shared/focusTest';
import mountTest from '../../../tests/shared/mountTest';
import { sleep } from '../../../tests/utils';
describe('Input.Password', () => {
focusTest(Input.Password);
@@ -70,4 +71,46 @@ describe('Input.Password', () => {
.getDOMNode(),
);
});
// https://github.com/ant-design/ant-design/issues/20541
it('should not show value attribute in input element', async () => {
const wrapper = mount(<Input.Password />);
wrapper
.find('input')
.at('0')
.simulate('change', { target: { value: 'value' } });
await sleep();
expect(
wrapper
.find('input')
.at('0')
.getDOMNode()
.getAttribute('value'),
).toBeFalsy();
});
// https://github.com/ant-design/ant-design/issues/20541
it('could be unmount without errors', () => {
expect(() => {
const wrapper = mount(<Input.Password />);
wrapper
.find('input')
.at('0')
.simulate('change', { target: { value: 'value' } });
wrapper.unmount();
}).not.toThrow();
});
// https://github.com/ant-design/ant-design/pull/20544#issuecomment-569861679
it('should not contain value attribute in input element with defautValue', async () => {
const wrapper = mount(<Input.Password defaultValue="value" />);
await sleep();
expect(
wrapper
.find('input')
.at('0')
.getDOMNode()
.getAttribute('value'),
).toBeFalsy();
});
});

View File

@@ -421,7 +421,6 @@ exports[`renders ./components/input/demo/align.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""

View File

@@ -35,7 +35,7 @@ function formatNumber(value) {
class NumericInput extends React.Component {
onChange = e => {
const { value } = e.target;
const reg = /^-?(0|[1-9][0-9]*)(\.[0-9]*)?$/;
const reg = /^-?[0-9]*(\.[0-9]*)?$/;
if ((!isNaN(value) && reg.test(value)) || value === '' || value === '-') {
this.props.onChange(value);
}
@@ -44,9 +44,11 @@ class NumericInput extends React.Component {
// '.' at the end or only '-' in the input box.
onBlur = () => {
const { value, onBlur, onChange } = this.props;
let valueTemp = value;
if (value.charAt(value.length - 1) === '.' || value === '-') {
onChange(value.slice(0, -1));
valueTemp = value.slice(0, -1);
}
onChange(valueTemp.replace(/0*(\d+)/, '$1'));
if (onBlur) {
onBlur();
}

View File

@@ -7,6 +7,7 @@ import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
export interface GeneratorProps {
suffixCls: string;
tagName: 'header' | 'footer' | 'main' | 'section';
displayName: string;
}
export interface BasicProps extends React.HTMLAttributes<HTMLDivElement> {
prefixCls?: string;
@@ -30,9 +31,11 @@ interface BasicPropsWithTagName extends BasicProps {
tagName: 'header' | 'footer' | 'main' | 'section';
}
function generator({ suffixCls, tagName }: GeneratorProps) {
function generator({ suffixCls, tagName, displayName }: GeneratorProps) {
return (BasicComponent: any) => {
return class Adapter extends React.Component<BasicProps, any> {
static displayName: string = displayName;
static Header: any;
static Footer: any;
@@ -108,21 +111,25 @@ const Layout: React.ComponentClass<BasicProps> & {
} = generator({
suffixCls: 'layout',
tagName: 'section',
displayName: 'Layout',
})(BasicLayout);
const Header = generator({
suffixCls: 'layout-header',
tagName: 'header',
displayName: 'Header',
})(Basic);
const Footer = generator({
suffixCls: 'layout-footer',
tagName: 'footer',
displayName: 'Footer',
})(Basic);
const Content = generator({
suffixCls: 'layout-content',
tagName: 'main',
displayName: 'Content',
})(Basic);
Layout.Header = Header;

View File

@@ -72,7 +72,7 @@ export default class Item extends React.Component<ListItemProps, any> {
context: any;
isItemContainsTextNode() {
isItemContainsTextNodeAndNotSingular() {
const { children } = this.props;
let result;
React.Children.forEach(children, (element: React.ReactElement<any>) => {
@@ -80,7 +80,7 @@ export default class Item extends React.Component<ListItemProps, any> {
result = true;
}
});
return result;
return result && React.Children.count(children) > 1;
}
isFlexMode() {
@@ -89,7 +89,7 @@ export default class Item extends React.Component<ListItemProps, any> {
if (itemLayout === 'vertical') {
return !!extra;
}
return !this.isItemContainsTextNode();
return !this.isItemContainsTextNodeAndNotSingular();
}
renderItem = ({ getPrefixCls }: ConfigConsumerProps) => {

View File

@@ -763,27 +763,27 @@ exports[`renders ./components/list/demo/simple.md correctly 1`] = `
class="ant-list-items"
>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Racing car sprays burning fuel into crowd.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Japanese princess to wed commoner.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Australian walks 100km after outback crash.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Man charged over missing wedding girl.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Los Angeles battles huge wildfires.
</li>
@@ -823,27 +823,27 @@ exports[`renders ./components/list/demo/simple.md correctly 1`] = `
class="ant-list-items"
>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Racing car sprays burning fuel into crowd.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Japanese princess to wed commoner.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Australian walks 100km after outback crash.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Man charged over missing wedding girl.
</li>
<li
class="ant-list-item ant-list-item-no-flex"
class="ant-list-item"
>
Los Angeles battles huge wildfires.
</li>

View File

@@ -52,6 +52,7 @@
&-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: @list-item-padding;
&-content {

View File

@@ -327,7 +327,6 @@ exports[`renders ./components/locale-provider/demo/all.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""

View File

@@ -3539,7 +3539,6 @@ exports[`Locale Provider should display the text as ar 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="اختيار الوقت"
type="text"
value=""
@@ -8873,7 +8872,6 @@ exports[`Locale Provider should display the text as bg 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Избор на час"
type="text"
value=""
@@ -14207,7 +14205,6 @@ exports[`Locale Provider should display the text as ca 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Seleccionar hora"
type="text"
value=""
@@ -19541,7 +19538,6 @@ exports[`Locale Provider should display the text as cs 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Vybrat čas"
type="text"
value=""
@@ -24875,7 +24871,6 @@ exports[`Locale Provider should display the text as da 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Vælg tid"
type="text"
value=""
@@ -30209,7 +30204,6 @@ exports[`Locale Provider should display the text as de 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Zeit auswählen"
type="text"
value=""
@@ -35543,7 +35537,6 @@ exports[`Locale Provider should display the text as el 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Επιλέξτε ώρα"
type="text"
value=""
@@ -40877,7 +40870,6 @@ exports[`Locale Provider should display the text as en 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -46211,7 +46203,6 @@ exports[`Locale Provider should display the text as en-gb 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -51545,7 +51536,6 @@ exports[`Locale Provider should display the text as es 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Seleccionar hora"
type="text"
value=""
@@ -56879,7 +56869,6 @@ exports[`Locale Provider should display the text as et 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Vali aeg"
type="text"
value=""
@@ -62213,7 +62202,6 @@ exports[`Locale Provider should display the text as fa 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="انتخاب زمان"
type="text"
value=""
@@ -67547,7 +67535,6 @@ exports[`Locale Provider should display the text as fi 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Valitse aika"
type="text"
value=""
@@ -72881,7 +72868,6 @@ exports[`Locale Provider should display the text as fr 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Sélectionner l'heure"
type="text"
value=""
@@ -78215,7 +78201,6 @@ exports[`Locale Provider should display the text as fr 2`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Sélectionner l'heure"
type="text"
value=""
@@ -83549,7 +83534,6 @@ exports[`Locale Provider should display the text as he 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="בחר שעה"
type="text"
value=""
@@ -88883,7 +88867,6 @@ exports[`Locale Provider should display the text as hi 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="समय का चयन करें"
type="text"
value=""
@@ -94217,7 +94200,6 @@ exports[`Locale Provider should display the text as hr 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Odaberite vrijeme"
type="text"
value=""
@@ -99551,7 +99533,6 @@ exports[`Locale Provider should display the text as hu 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Válasszon időt"
type="text"
value=""
@@ -104885,7 +104866,6 @@ exports[`Locale Provider should display the text as hy 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Ընտրեք ժամը"
type="text"
value=""
@@ -110219,7 +110199,6 @@ exports[`Locale Provider should display the text as id 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Pilih waktu"
type="text"
value=""
@@ -115553,7 +115532,6 @@ exports[`Locale Provider should display the text as is 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Velja tíma"
type="text"
value=""
@@ -120887,7 +120865,6 @@ exports[`Locale Provider should display the text as it 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Selezionare l'orario"
type="text"
value=""
@@ -126221,7 +126198,6 @@ exports[`Locale Provider should display the text as ja 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="時刻を選択"
type="text"
value=""
@@ -131555,7 +131531,6 @@ exports[`Locale Provider should display the text as kn 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="ಸಮಯ ಆಯ್ಕೆಮಾಡಿ"
type="text"
value=""
@@ -136889,7 +136864,6 @@ exports[`Locale Provider should display the text as ko 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="날짜 선택"
type="text"
value=""
@@ -142223,7 +142197,6 @@ exports[`Locale Provider should display the text as ku-iq 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Demê hilbijêre"
type="text"
value=""
@@ -147557,7 +147530,6 @@ exports[`Locale Provider should display the text as lv 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Izvēlieties laiku"
type="text"
value=""
@@ -152891,7 +152863,6 @@ exports[`Locale Provider should display the text as mk 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Избери време"
type="text"
value=""
@@ -158225,7 +158196,6 @@ exports[`Locale Provider should display the text as mn-mn 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Цаг сонгох"
type="text"
value=""
@@ -163559,7 +163529,6 @@ exports[`Locale Provider should display the text as ms-my 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Sila pilih masa"
type="text"
value=""
@@ -168893,7 +168862,6 @@ exports[`Locale Provider should display the text as nb 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Velg tid"
type="text"
value=""
@@ -174227,7 +174195,6 @@ exports[`Locale Provider should display the text as ne-np 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -179561,7 +179528,6 @@ exports[`Locale Provider should display the text as nl 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Selecteer tijd"
type="text"
value=""
@@ -184895,7 +184861,6 @@ exports[`Locale Provider should display the text as nl-be 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Selecteer tijd"
type="text"
value=""
@@ -190229,7 +190194,6 @@ exports[`Locale Provider should display the text as pl 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Wybierz godzinę"
type="text"
value=""
@@ -195563,7 +195527,6 @@ exports[`Locale Provider should display the text as pt 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Hora"
type="text"
value=""
@@ -200897,7 +200860,6 @@ exports[`Locale Provider should display the text as pt-br 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Hora"
type="text"
value=""
@@ -206231,7 +206193,6 @@ exports[`Locale Provider should display the text as ro 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Selectează ora"
type="text"
value=""
@@ -211565,7 +211526,6 @@ exports[`Locale Provider should display the text as ru 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Выберите время"
type="text"
value=""
@@ -216899,7 +216859,6 @@ exports[`Locale Provider should display the text as sk 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Vybrať čas"
type="text"
value=""
@@ -222233,7 +222192,6 @@ exports[`Locale Provider should display the text as sl 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Izberite čas"
type="text"
value=""
@@ -227567,7 +227525,6 @@ exports[`Locale Provider should display the text as sr 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Izaberite vreme"
type="text"
value=""
@@ -232901,7 +232858,6 @@ exports[`Locale Provider should display the text as sv 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Välj tid"
type="text"
value=""
@@ -238235,7 +238191,6 @@ exports[`Locale Provider should display the text as ta 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="நேரத்தைத் தேர்ந்தெடுக்கவும்"
type="text"
value=""
@@ -243569,7 +243524,6 @@ exports[`Locale Provider should display the text as th 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="เลือกเวลา"
type="text"
value=""
@@ -248903,7 +248857,6 @@ exports[`Locale Provider should display the text as tr 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Zaman Seç"
type="text"
value=""
@@ -254237,7 +254190,6 @@ exports[`Locale Provider should display the text as uk 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Оберіть час"
type="text"
value=""
@@ -259571,7 +259523,6 @@ exports[`Locale Provider should display the text as vi 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Chọn thời gian"
type="text"
value=""
@@ -264905,7 +264856,6 @@ exports[`Locale Provider should display the text as zh-cn 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="请选择时间"
type="text"
value=""
@@ -270239,7 +270189,6 @@ exports[`Locale Provider should display the text as zh-tw 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="請選擇時間"
type="text"
value=""

View File

@@ -189,4 +189,8 @@ describe('message', () => {
jest.advanceTimersByTime(1500);
expect(document.querySelectorAll('.ant-message-notice').length).toBe(0);
});
it('should not throw error when pass null', () => {
message.error(null);
});
});

View File

@@ -114,7 +114,10 @@ type JointContent = ConfigContent | ArgsProps;
export type ConfigOnClose = () => void;
function isArgsProps(content: JointContent): content is ArgsProps {
return typeof content === 'object' && !!(content as ArgsProps).content;
return (
Object.prototype.toString.call(content) === '[object Object]' &&
!!(content as ArgsProps).content
);
}
export interface ConfigOptions {

View File

@@ -1,14 +1,14 @@
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import Button from '../button';
import { ButtonType, NativeButtonProps } from '../button/button';
import { ButtonType, ButtonProps } from '../button/button';
export interface ActionButtonProps {
type?: ButtonType;
actionFn?: (...args: any[]) => any | PromiseLike<any>;
closeModal: Function;
autoFocus?: boolean;
buttonProps?: NativeButtonProps;
buttonProps?: ButtonProps;
}
export interface ActionButtonState {

View File

@@ -6,7 +6,7 @@ import addEventListener from 'rc-util/lib/Dom/addEventListener';
import { getConfirmLocale } from './locale';
import Icon from '../icon';
import Button from '../button';
import { ButtonType, NativeButtonProps } from '../button/button';
import { ButtonType, ButtonProps } from '../button/button';
import LocaleReceiver from '../locale-provider/LocaleReceiver';
import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
@@ -60,8 +60,8 @@ export interface ModalProps {
maskClosable?: boolean;
/** 强制渲染 Modal */
forceRender?: boolean;
okButtonProps?: NativeButtonProps;
cancelButtonProps?: NativeButtonProps;
okButtonProps?: ButtonProps;
cancelButtonProps?: ButtonProps;
destroyOnClose?: boolean;
style?: React.CSSProperties;
wrapClassName?: string;
@@ -90,8 +90,8 @@ export interface ModalFuncProps {
// TODO: find out exact types
onOk?: (...args: any[]) => any;
onCancel?: (...args: any[]) => any;
okButtonProps?: NativeButtonProps;
cancelButtonProps?: NativeButtonProps;
okButtonProps?: ButtonProps;
cancelButtonProps?: ButtonProps;
centered?: boolean;
width?: string | number;
iconClassName?: string;

View File

@@ -64,7 +64,7 @@ The items listed above are all functions, expecting a settings object as paramet
| centered | Centered Modal | Boolean | `false` | 3.8.0 |
| className | className of container | string | - | 3.1.1 |
| content | Content | string\|ReactNode | - | |
| icon | custom icon (`Added in 3.12.0`) | string\|ReactNode | `<Icon type="question-circle">` | 3.12.0 |
| icon | custom icon (`Added in 3.12.0`) | string\|ReactNode | `<Icon type="question-circle" />` | 3.12.0 |
| iconType | Icon `type` of the Icon component (deprecated after `3.12.0`) | string | `question-circle` | |
| keyboard | Whether support press esc to close | Boolean | true | 3.4.2 |
| mask | Whether show mask or not. | Boolean | true | 3.13.0 |

View File

@@ -68,7 +68,7 @@ title: Modal
| centered | 垂直居中展示 Modal | Boolean | `false` | 3.8.2 |
| className | 容器类名 | string | - | 3.1.1 |
| content | 内容 | string\|ReactNode | 无 | |
| icon | 自定义图标3.12.0 新增) | string\|ReactNode | `<Icon type="question-circle">` | 3.12.0 |
| icon | 自定义图标3.12.0 新增) | string\|ReactNode | `<Icon type="question-circle" />` | 3.12.0 |
| iconType | 图标类型3.12.0 后废弃,请使用 `icon` | string | `question-circle` | |
| mask | 是否展示遮罩 | Boolean | true | 3.13.0 |
| maskClosable | 点击蒙层是否允许关闭 | Boolean | `false` | |

View File

@@ -938,7 +938,7 @@ exports[`renders ./components/pagination/demo/jump.md correctly 1`] = `
<div
class="ant-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""
@@ -1109,7 +1109,7 @@ exports[`renders ./components/pagination/demo/jump.md correctly 1`] = `
<div
class="ant-pagination-options-quick-jumper"
>
Goto
Go to
<input
disabled=""
type="text"
@@ -1397,7 +1397,7 @@ exports[`renders ./components/pagination/demo/mini.md correctly 1`] = `
<div
class="ant-pagination-options-quick-jumper"
>
Goto
Go to
<input
type="text"
value=""

View File

@@ -11,7 +11,6 @@
.reset-component;
display: inline-block;
line-height: unset;
}
// 一般状态

View File

@@ -15,7 +15,7 @@ When part of the page is waiting for asynchronous data or during a rendering pro
| Property | Description | Type | Default Value | Version |
| --- | --- | --- | --- | --- |
| delay | specifies a delay in milliseconds for loading state (prevent flush) | number (milliseconds) | - | |
| indicator | React node of the spinning indicator | ReactElement | - | |
| indicator | React node of the spinning indicator | ReactNode | - | |
| size | size of Spin, options: `small`, `default` and `large` | string | `default` | |
| spinning | whether Spin is spinning | boolean | true | |
| tip | customize description content when Spin has children | string | - | |
@@ -23,5 +23,6 @@ When part of the page is waiting for asynchronous data or during a rendering pro
### Static Method
- `Spin.setDefaultIndicator(indicator: ReactElement)`
As `indicator`, you can define the global default spin element
- `Spin.setDefaultIndicator(indicator: ReactNode)`
You can define default spin element globally.

View File

@@ -16,7 +16,7 @@ subtitle: 加载中
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| --- | --- | --- | --- | --- |
| delay | 延迟显示加载效果的时间(防止闪烁) | number (毫秒) | - | |
| indicator | 加载指示符 | ReactElement | - | |
| indicator | 加载指示符 | ReactNode | - | |
| size | 组件大小,可选值为 `small` `default` `large` | string | 'default' | |
| spinning | 是否为加载中状态 | boolean | true | |
| tip | 当作为包裹元素时,可以自定义描述文案 | string | - | |
@@ -24,5 +24,6 @@ subtitle: 加载中
### 静态方法
- `Spin.setDefaultIndicator(indicator: ReactElement)`
同上 `indicator`,你可以自定义全局默认元素
- `Spin.setDefaultIndicator(indicator: ReactNode)`
你可以自定义全局默认 Spin 的元素。

View File

@@ -28,7 +28,7 @@
@steps-dot-size: 8px;
@steps-current-dot-size: 10px;
@steps-desciption-max-width: 140px;
@steps-nav-content-max-width: @steps-desciption-max-width;
@steps-nav-content-max-width: auto;
.@{steps-prefix-cls} {
.reset-component;

View File

@@ -2,19 +2,18 @@
.@{steps-prefix-cls}-item {
overflow: visible;
&-tail {
margin-left: 51px;
margin-left: 58px;
padding: 3.5px 24px;
}
&-content {
display: block;
// icon左边距离+一半icon宽度是content一半的宽度垂直对齐icon
width: (@steps-icon-size / 2 + 36px) * 2;
width: (@steps-icon-size / 2 + 42px) * 2;
margin-top: 8px;
text-align: center;
}
&-icon {
display: inline-block;
margin-left: 36px;
margin-left: 42px;
}
&-title {
padding-right: 0;
@@ -22,6 +21,12 @@
display: none;
}
}
&-subtitle {
display: block;
margin-bottom: 4px;
margin-left: 0;
line-height: @line-height-base;
}
}
&.@{steps-prefix-cls}-small:not(.@{steps-prefix-cls}-dot) {
.@{steps-prefix-cls}-item {

View File

@@ -89,3 +89,36 @@
width: 100%;
}
}
@media (max-width: @screen-xs) {
.@{steps-prefix-cls}-navigation {
> .@{steps-prefix-cls}-item {
margin-right: 0 !important;
&::before {
display: none;
}
&.@{steps-prefix-cls}-item-active::before {
top: 0;
right: 0;
left: unset;
display: block;
width: 3px;
height: calc(100% - 24px);
}
&::after {
position: relative;
top: -2px;
left: 50%;
display: block;
width: 8px;
height: 8px;
margin-bottom: 8px;
text-align: center;
transform: rotate(135deg);
}
> .@{steps-prefix-cls}-item-container > .@{steps-prefix-cls}-item-tail {
visibility: hidden;
}
}
}
}

View File

@@ -265,10 +265,10 @@
@layout-trigger-color-light: @text-color;
// z-index list, order by `z-index`
@zindex-badge: auto;
@zindex-table-fixed: auto;
@zindex-affix: 10;
@zindex-back-top: 10;
@zindex-badge: 10;
@zindex-picker-panel: 10;
@zindex-popup-close: 10;
@zindex-modal: 1000;

View File

@@ -868,7 +868,6 @@ class Table<T> extends React.Component<InternalTableProps<T>, TableState<T>> {
};
toggleSortOrder(column: ColumnProps<T>) {
const pagination = { ...this.state.pagination };
const sortDirections = column.sortDirections || (this.props.sortDirections as SortOrder[]);
const { sortOrder, sortColumn } = this.state;
// 只同时允许一列进行排序,否则会导致排序顺序的逻辑问题
@@ -883,14 +882,7 @@ class Table<T> extends React.Component<InternalTableProps<T>, TableState<T>> {
newSortOrder = sortDirections[0];
}
if (this.props.pagination) {
// Reset current prop
pagination.current = 1;
pagination.onChange!(pagination.current);
}
const newState = {
pagination,
sortOrder: newSortOrder,
sortColumn: newSortOrder ? column : null,
};

View File

@@ -613,6 +613,7 @@ describe('Table.sorter', () => {
createTable({
pagination: {
pageSize: 2,
defaultCurrent: 2,
onChange: onPageChange,
},
onChange,
@@ -620,8 +621,8 @@ describe('Table.sorter', () => {
);
wrapper.find('.ant-table-column-sorters').simulate('click');
expect(onChange.mock.calls[0][0].current).toBe(1);
expect(onPageChange.mock.calls[0][0]).toBe(1);
expect(onChange.mock.calls[0][0].current).toBe(2);
expect(onPageChange).not.toHaveBeenCalled();
});
it('should support onHeaderCell in sort column', () => {

View File

@@ -190,7 +190,7 @@ export interface TableProps<T> {
onExpand?: (expanded: boolean, record: T) => void;
onChange?: (
pagination: PaginationConfig,
filters: Record<keyof T, string[]>,
filters: Partial<Record<keyof T, string[]>>,
sorter: SorterResult<T>,
extra: TableCurrentDataSource<T>,
) => void;

View File

@@ -49,7 +49,7 @@
border-bottom: @border-width-base @border-style-base @border-color-split;
transition: background 0.3s ease;
&[colspan] {
&[colspan]:not([colspan='1']) {
text-align: center;
}
@@ -623,7 +623,10 @@
// https://github.com/ant-design/ant-design/issues/14545
// https://github.com/ant-design/ant-design/issues/19491
.@{table-prefix-cls}-fixed-columns-in-body:not([colspan]) {
visibility: hidden;
color: transparent;
& > * {
visibility: hidden;
}
}
}
}

View File

@@ -29,6 +29,7 @@
left: 0;
z-index: 1;
box-sizing: border-box;
width: 0;
height: 2px;
background-color: @tabs-ink-bar-color;
transform-origin: 0 0;
@@ -330,7 +331,7 @@
bottom: auto;
left: auto;
width: 2px;
height: auto;
height: 0;
}
.@{tab-prefix-cls}-tab-next {
@@ -403,12 +404,12 @@
.@{tab-prefix-cls}-top .@{tab-prefix-cls}-ink-bar-animated,
.@{tab-prefix-cls}-bottom .@{tab-prefix-cls}-ink-bar-animated {
transition: transform 0.3s @ease-in-out, width 0.3s @ease-in-out, left 0.3s @ease-in-out;
transition: transform 0.3s @ease-in-out, width 0.2s @ease-in-out, left 0.3s @ease-in-out;
}
.@{tab-prefix-cls}-left .@{tab-prefix-cls}-ink-bar-animated,
.@{tab-prefix-cls}-right .@{tab-prefix-cls}-ink-bar-animated {
transition: transform 0.3s @ease-in-out, height 0.3s @ease-in-out, top 0.3s @ease-in-out;
transition: transform 0.3s @ease-in-out, height 0.2s @ease-in-out, top 0.3s @ease-in-out;
}
// No animation

View File

@@ -442,11 +442,11 @@ exports[`renders ./components/tag/demo/controlled.md correctly 1`] = `
exports[`renders ./components/tag/demo/hot-tags.md correctly 1`] = `
<div>
<h6
style="margin-right:8px;display:inline"
<span
style="margin-right:8px"
>
Categories:
</h6>
</span>
<span
class="ant-tag ant-tag-checkable"
>

View File

@@ -39,6 +39,16 @@ describe('Tag', () => {
expect(wrapper.find('.ant-tag:not(.ant-tag-hidden)').length).toBe(1);
});
// https://github.com/ant-design/ant-design/issues/20344
it('should not trigger onClick when click close icon', () => {
const onClose = jest.fn();
const onClick = jest.fn();
const wrapper = mount(<Tag closable onClose={onClose} onClick={onClick} />);
wrapper.find('.anticon-close').simulate('click');
expect(onClose).toHaveBeenCalled();
expect(onClick).not.toHaveBeenCalled();
});
describe('visibility', () => {
it('can be controlled by visible with visible as initial value', () => {
const wrapper = mount(<Tag visible />);

View File

@@ -36,7 +36,7 @@ class HotTags extends React.Component {
const { selectedTags } = this.state;
return (
<div>
<h6 style={{ marginRight: 8, display: 'inline' }}>Categories:</h6>
<span style={{ marginRight: 8 }}>Categories:</span>
{tagsFromServer.map(tag => (
<CheckableTag
key={tag}

View File

@@ -100,6 +100,7 @@ class Tag extends React.Component<TagProps, TagState> {
}
handleIconClick = (e: React.MouseEvent<HTMLElement>) => {
e.stopPropagation();
this.setVisible(false, e);
};

View File

@@ -7,7 +7,6 @@ exports[`renders ./components/time-picker/demo/12hours.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -44,7 +43,6 @@ exports[`renders ./components/time-picker/demo/12hours.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -81,7 +79,6 @@ exports[`renders ./components/time-picker/demo/12hours.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -122,7 +119,6 @@ exports[`renders ./components/time-picker/demo/addon.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -162,7 +158,6 @@ exports[`renders ./components/time-picker/demo/basic.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -203,7 +198,6 @@ exports[`renders ./components/time-picker/demo/disabled.md correctly 1`] = `
<input
class="ant-time-picker-input"
disabled=""
id=""
placeholder="Select time"
type="text"
value="12:08:23"
@@ -243,7 +237,6 @@ exports[`renders ./components/time-picker/demo/hide-column.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value="12:08"
@@ -303,7 +296,6 @@ exports[`renders ./components/time-picker/demo/interval-options.md correctly 1`]
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -344,7 +336,6 @@ exports[`renders ./components/time-picker/demo/size.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value="12:08:23"
@@ -401,7 +392,6 @@ exports[`renders ./components/time-picker/demo/size.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value="12:08:23"
@@ -458,7 +448,6 @@ exports[`renders ./components/time-picker/demo/size.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value="12:08:23"
@@ -519,7 +508,6 @@ exports[`renders ./components/time-picker/demo/suffix.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""
@@ -556,7 +544,6 @@ exports[`renders ./components/time-picker/demo/value.md correctly 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value=""

View File

@@ -6,7 +6,6 @@ exports[`TimePicker not render clean icon when allowClear is false 1`] = `
>
<input
class="ant-time-picker-input"
id=""
placeholder="Select time"
type="text"
value="00:00:00"
@@ -48,7 +47,6 @@ Array [
>
<input
class="ant-time-picker-input"
id=""
placeholder="Избери дата"
type="text"
value="00:00:00"

View File

@@ -241,4 +241,14 @@ describe('Tooltip', () => {
expect(onVisibleChange).toHaveBeenCalledWith(false);
expect(wrapper.instance().tooltip.props.visible).toBe(false);
});
// https://github.com/ant-design/ant-design/issues/20891
it('should display zero', async () => {
const wrapper = mount(
<Tooltip title={0} visible>
<div />
</Tooltip>,
);
expect(wrapper.find('.ant-tooltip-inner').getDOMNode().innerHTML).toBe('0');
});
});

View File

@@ -226,7 +226,15 @@ class Tooltip extends React.Component<TooltipProps, any> {
isNoTitle() {
const { title, overlay } = this.props;
return !title && !overlay; // overlay for old version compatibility
return !title && !overlay && title !== 0; // overlay for old version compatibility
}
getOverlay() {
const { title, overlay } = this.props;
if (title === 0) {
return title;
}
return overlay || title || '';
}
renderTooltip = ({
@@ -236,8 +244,6 @@ class Tooltip extends React.Component<TooltipProps, any> {
const { props, state } = this;
const {
prefixCls: customizePrefixCls,
title,
overlay,
openClassName,
getPopupContainer,
getTooltipContainer,
@@ -266,7 +272,7 @@ class Tooltip extends React.Component<TooltipProps, any> {
getTooltipContainer={getPopupContainer || getTooltipContainer || getContextPopupContainer}
ref={this.saveTooltip}
builtinPlacements={this.getPlacements()}
overlay={overlay || title || ''}
overlay={this.getOverlay()}
visible={visible}
onVisibleChange={this.onVisibleChange}
onPopupAlign={this.onPopupAlign}

View File

@@ -40,7 +40,7 @@ Tree selection control.
| suffixIcon | The custom suffix icon | ReactNode | - | 3.10.0 |
| treeCheckable | Whether to show checkbox on the treeNodes | boolean | false | |
| treeCheckStrictly | Whether to check nodes precisely (in the `checkable` mode), means parent and child nodes are not associated, and it will make `labelInValue` be true | boolean | false | |
| treeData | Data of the treeNodes, manual construction work is no longer needed if this property has been set(ensure the Uniqueness of each value) | array\<{ value, title, children, \[disabled, disableCheckbox, selectable] }> | \[] | |
| treeData | Data of the treeNodes, manual construction work is no longer needed if this property has been set(ensure the Uniqueness of each value) | array\<{ value, title, children, \[disabled, disableCheckbox, selectable, checkable] }> | \[] | |
| treeDataSimpleMode | Enable simple mode of treeData. Changes the `treeData` schema to: \[{id:1, pId:0, value:'1', title:"test1",...},...] where pId is parent node's id). It is possible to replace the default `id` and `pId` keys by providing object to `treeDataSimpleMode` | false\|object\<{ id: string, pId: string, rootPId: string }> | false | |
| treeDefaultExpandAll | Whether to expand all treeNodes by default | boolean | false | |
| treeDefaultExpandedKeys | Default expanded treeNodes | string\[] | - | |
@@ -67,6 +67,7 @@ Tree selection control.
| Property | Description | Type | Default | Version |
| --- | --- | --- | --- | --- |
| selectable | can be selected | boolean | true | 3.9.3 |
| checkable | When Tree is checkable, set TreeNode display Checkbox or not | boolean | - | 3.17.0 |
| disableCheckbox | Disables the checkbox of the treeNode | boolean | false | |
| disabled | Disabled or not | boolean | false | |
| isLeaf | Leaf node or not | boolean | false | |

View File

@@ -41,7 +41,7 @@ title: TreeSelect
| suffixIcon | 自定义的选择框后缀图标 | ReactNode | - | 3.10.0 |
| treeCheckable | 显示 checkbox | boolean | false | |
| treeCheckStrictly | checkable 状态下节点选择完全受控(父子节点选中状态不再关联),会使得 `labelInValue` 强制为 true | boolean | false | |
| treeData | treeNodes 数据,如果设置则不需要手动构造 TreeNode 节点value 在整个树范围内唯一) | array\<{value, title, children, \[disabled, disableCheckbox, selectable]}> | \[] | |
| treeData | treeNodes 数据,如果设置则不需要手动构造 TreeNode 节点value 在整个树范围内唯一) | array\<{value, title, children, \[disabled, disableCheckbox, selectable, checkable]}> | \[] | |
| treeDataSimpleMode | 使用简单格式的 treeData具体设置参考可设置的类型 (此时 treeData 应变为这样的数据结构: \[{id:1, pId:0, value:'1', title:"test1",...},...], `pId` 是父节点的 id) | false\|object\<{ id: string, pId: string, rootPId: string }> | false | |
| treeDefaultExpandAll | 默认展开所有树节点 | boolean | false | |
| treeDefaultExpandedKeys | 默认展开的树节点 | string\[] | - | |
@@ -68,6 +68,7 @@ title: TreeSelect
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| --- | --- | --- | --- | --- |
| selectable | 是否可选 | boolean | true | 3.9.3 |
| checkable | 当树为 checkable 时,设置独立节点是否展示 Checkbox | boolean | - | 3.17.0 |
| disableCheckbox | 禁掉 checkbox | boolean | false | |
| disabled | 是否禁用 | boolean | false | |
| isLeaf | 是否是叶子节点 | boolean | false | |

View File

@@ -194,15 +194,15 @@ export default class Tree extends React.Component<TreeProps, any> {
if (loading) {
return <Icon type="loading" className={`${prefixCls}-switcher-loading-icon`} />;
}
if (isLeaf) {
return showLine ? <Icon type="file" className={`${prefixCls}-switcher-line-icon`} /> : null;
}
const switcherCls = `${prefixCls}-switcher-icon`;
if (switcherIcon) {
return React.cloneElement(switcherIcon, {
className: classNames(switcherIcon.props.className || '', switcherCls),
});
}
if (isLeaf) {
return showLine ? <Icon type="file" className={`${prefixCls}-switcher-line-icon`} /> : null;
}
return showLine ? (
<Icon
type={expanded ? 'minus-square' : 'plus-square'}

View File

@@ -725,27 +725,7 @@ exports[`renders ./components/tree/demo/customized-icon.md correctly 1`] = `
>
<span
class="ant-tree-switcher ant-tree-switcher-noop"
>
<i
aria-label="icon: down"
class="anticon anticon-down ant-tree-switcher-icon"
>
<svg
aria-hidden="true"
class=""
data-icon="down"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
/>
</svg>
</i>
</span>
/>
<span
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal ant-tree-node-selected"
title="leaf"
@@ -786,27 +766,7 @@ exports[`renders ./components/tree/demo/customized-icon.md correctly 1`] = `
>
<span
class="ant-tree-switcher ant-tree-switcher-noop"
>
<i
aria-label="icon: down"
class="anticon anticon-down ant-tree-switcher-icon"
>
<svg
aria-hidden="true"
class=""
data-icon="down"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
/>
</svg>
</i>
</span>
/>
<span
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
title="leaf"
@@ -2249,13 +2209,13 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
class="ant-tree-switcher ant-tree-switcher-noop"
>
<i
aria-label="icon: down"
class="anticon anticon-down ant-tree-switcher-icon"
aria-label="icon: file"
class="anticon anticon-file ant-tree-switcher-line-icon"
>
<svg
aria-hidden="true"
class=""
data-icon="down"
data-icon="file"
fill="currentColor"
focusable="false"
height="1em"
@@ -2263,7 +2223,7 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
width="1em"
>
<path
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0 0 42 42h216v494z"
/>
</svg>
</i>
@@ -2287,13 +2247,13 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
class="ant-tree-switcher ant-tree-switcher-noop"
>
<i
aria-label="icon: down"
class="anticon anticon-down ant-tree-switcher-icon"
aria-label="icon: file"
class="anticon anticon-file ant-tree-switcher-line-icon"
>
<svg
aria-hidden="true"
class=""
data-icon="down"
data-icon="file"
fill="currentColor"
focusable="false"
height="1em"
@@ -2301,7 +2261,7 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
width="1em"
>
<path
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0 0 42 42h216v494z"
/>
</svg>
</i>
@@ -2325,13 +2285,13 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
class="ant-tree-switcher ant-tree-switcher-noop"
>
<i
aria-label="icon: down"
class="anticon anticon-down ant-tree-switcher-icon"
aria-label="icon: file"
class="anticon anticon-file ant-tree-switcher-line-icon"
>
<svg
aria-hidden="true"
class=""
data-icon="down"
data-icon="file"
fill="currentColor"
focusable="false"
height="1em"
@@ -2339,7 +2299,7 @@ exports[`renders ./components/tree/demo/switcher-icon.md correctly 1`] = `
width="1em"
>
<path
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0 0 42 42h216v494z"
/>
</svg>
</i>

View File

@@ -30,4 +30,16 @@ describe('Tree', () => {
);
expect(wrapper.render()).toMatchSnapshot();
});
it('switcherIcon in Tree should not render at leaf nodes', () => {
const wrapper = mount(
<Tree switcherIcon={<i className="switcherIcon" />} defaultExpandAll>
<TreeNode icon="icon">
<TreeNode id="node1" title="node1" icon="icon" key="0-0-2" />
<TreeNode id="node2" title="node2" key="0-0-3" />
</TreeNode>
</Tree>,
);
expect(wrapper.find('.switcherIcon').length).toBe(1);
});
});

View File

@@ -100,7 +100,7 @@ class Demo extends React.Component {
) {
loop(data, dropKey, item => {
item.children = item.children || [];
// where to insert 示例添加到部,可以是随意位置
// where to insert 示例添加到部,可以是随意位置
item.children.unshift(dragObj);
});
} else {

View File

@@ -149,6 +149,10 @@
cursor: pointer;
}
&.@{tree-prefix-cls}-iconEle:empty {
display: none;
}
&.@{tree-prefix-cls}-switcher {
position: relative;

View File

@@ -25,6 +25,7 @@ cols: 1
| editable | 是否可编辑,为对象时可对编辑进行控制 | boolean \| { editing: boolean, onStart: Function, onChange: Function(string) } | false | 3.14.0 |
| ellipsis | 设置自动溢出省略 | boolean | false | 3.14.0 |
| mark | 添加标记样式 | boolean | false | 3.14.0 |
| code | 添加代码样式 | boolean | false | 3.14.0 |
| underline | 添加下划线样式 | boolean | false | 3.14.0 |
| strong | 是否加粗 | boolean | false | 3.14.0 |
| type | 文本类型 | `secondary`, `warning`, `danger` | - | 3.14.0 |

View File

@@ -188,7 +188,7 @@ describe('Upload', () => {
});
});
it('should increase percent automaticly when call autoUpdateProgress in IE', done => {
it('should increase percent automatically when call autoUpdateProgress in IE', done => {
let uploadInstance;
let lastPercent = -1;
const props = {

View File

@@ -73,7 +73,10 @@ export const isImageUrl = (file: UploadFile): boolean => {
}
const url: string = (file.thumbUrl || file.url) as string;
const extension = extname(url);
if (/^data:image\//.test(url) || /(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg)$/i.test(extension)) {
if (
/^data:image\//.test(url) ||
/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(extension)
) {
return true;
}
if (/^data:/.test(url)) {

View File

@@ -3,7 +3,7 @@ order: 5
title: Customize Theme
---
Ant Design allows you to customize our design tokens in order to meet the needs of UI diversity from business and brand, including primary color, border radius, border color, etc.
Ant Design allows you to customize our design tokens to satisfy UI diversity from business or brand requirements, including primary color, border radius, border color, etc.
![customized themes](https://zos.alipayobjects.com/rmsportal/zTFoszBtDODhXfLAazfSpYbSLSEeytoG.png)
@@ -22,8 +22,8 @@ There are some major variables below, all less variables could be found in [Defa
@font-size-base: 14px; // major text font size
@heading-color: rgba(0, 0, 0, 0.85); // heading text color
@text-color: rgba(0, 0, 0, 0.65); // major text color
@text-color-secondary : rgba(0, 0, 0, .45); // secondary text color
@disabled-color : rgba(0, 0, 0, .25); // disable state color
@text-color-secondary: rgba(0, 0, 0, 0.45); // secondary text color
@disabled-color: rgba(0, 0, 0, 0.25); // disable state color
@border-radius-base: 4px; // major border radius
@border-color-base: #d9d9d9; // major border color
@box-shadow-base: 0 2px 8px rgba(0, 0, 0, 0.15); // major shadow for layers

View File

@@ -9,7 +9,7 @@ Here are the frequently asked questions about Ant Design and antd that you shoul
### Are you going to provide Sass/Stylus(etc.) style file?
No, but you can convert Less to Sass/Stylus(etc.) with tools that you can find on Google.
No plan, but you can convert Less to Sass/Stylus(etc.) with tools that you can find on Google.
### `Select Dropdown DatePicker TimePicker Popover Popconfirm` disappears when I click another popup component inside it. How do I resolve this?

View File

@@ -9,7 +9,7 @@ title: FAQ
### 你们会提供 Sass/Stylus 等格式的样式文件吗?
。事实上你可以使用工具(请自行 Google将 Less 转换成 Sass/Stylus 等。
暂无计划。事实上你可以使用工具(请自行 Google将 Less 转换成 Sass/Stylus 等。
### 当我点击 `Select Dropdown DatePicker TimePicker Popover Popconfirm` 内的另一个 popup 组件时它会消失,如何解决?
@@ -114,16 +114,18 @@ import { Menu, Breadcrumb, Icon } from 'antd';
### 当我指定了 DatePicker/RangePicker 的 `mode` 属性后,点击后无法选择年份/月份?
在业务开发中,你可能有年份选择,月份范围选择,周范围选择等需求,此时你给现有组件增加了 `mode` 属性,却发现无法进行点击选择行为,面板也不会关闭。
在业务开发中,你可能有年份选择,月份范围选择,周范围选择等需求,此时你给现有组件增加了 `mode` 属性,却发现无法进行点击选择行为,面板也不会关闭。如果给面板添加 `disabledDate` 也不会相应禁用对应的年/月/周。
- 重现链接https://codesandbox.io/s/dank-brook-v1csy
- 相同 issue[#15572](https://github.com/ant-design/ant-design/issues/15572)、[#16436](https://github.com/ant-design/ant-design/issues/16436)、[#11938](https://github.com/ant-design/ant-design/issues/11938)、[#11735](https://github.com/ant-design/ant-design/issues/11735)、[#11586](https://github.com/ant-design/ant-design/issues/11586)、[#10425](https://github.com/ant-design/ant-design/issues/10425)、[#11053](https://github.com/ant-design/ant-design/issues/11053)
就像[这个回复](https://github.com/ant-design/ant-design/issues/15572#issuecomment-475476135)里解释的一样,这是因为 `<DatePicker mode="year" />` 不等于 `YearPicker``<RangePicker mode="month" />` 不等于 `MonthRangePicker``mode` 属性是在 antd 3.0 时,为了控制面板展现状态而添加的属性,以支持[展示时间面板](https://github.com/ant-design/ant-design/issues/5190)等需求而添加的。`mode` 只会简单的改变当前显示的面板,不会修改默认的交互行为(比如 DatePicker 依然是点击日才会完成选择并关闭面板)。
同样的,`disabledDate` 对于任何 `<DatePicker />` 也只会针对**日面板**生效,[并不会对 `<DatePicker mode="year/month" />` 上的年/月面板生效](https://github.com/ant-design/ant-design/issues/9008#issuecomment-358554118)。
##### 解决办法
你可以参照 [这篇文章](https://juejin.im/post/5cf65c366fb9a07eca6968f9) 或者 [这篇文章](https://www.cnblogs.com/zyl-Tara/p/10197177.html) 里的做法,利用 `mode``onPanelChange` 等方法去封装一个 `YearPicker` 等组件。我们计划在 [antd@4.0](https://github.com/ant-design/ant-design/issues/16911) 中直接[添加更多相关日期组件](https://github.com/ant-design/ant-design/issues/4524#issuecomment-480576884)来支持这些需求。
你可以参照 [这篇文章](https://juejin.im/post/5cf65c366fb9a07eca6968f9) 或者 [这篇文章](https://www.cnblogs.com/zyl-Tara/p/10197177.html) 里的做法,利用 `mode``onPanelChange` 等方法去封装一个 `YearPicker` 等组件。我们计划在 [antd@4.0](https://github.com/ant-design/ant-design/issues/16911) 中直接[添加更多相关日期组件](https://github.com/ant-design/ant-design/issues/4524#issuecomment-480576884)来支持这些需求。届时不再需要使用 `mode="year|month"`,而是直接可以用 `YearPicker` `MonthPicker`,并且 `disabledDate` 也可以正确作用于这些 Picker。
### 如何正确的拼写 Ant Design

View File

@@ -13,15 +13,20 @@ If you try in local environment, Please refer to [Install and Initialization](ht
## First Example
Here is a simple example to show usage of Ant Design React.
Here is a simple codesandbox example to show the usage of Ant Design React.
<iframe src="https://codesandbox.io/embed/wk04r016q8?fontsize=14" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"></iframe>
<iframe
src="https://codesandbox.io/embed/antd-reproduction-template-6e93z?autoresize=1&fontsize=14&hidenavigation=1&theme=dark"
style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;"
title="antd reproduction template"
allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb"
sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"
/>
### 1. Create one codesandbox
Visit http://u.ant.design/codesandbox-repro to create a codesandbox. Don't forget to press the save button.
### 2. Using antd component
Replace the content of `index.js` with the following code. As you can see, there is no difference between antd's components and typical React components.

View File

@@ -11,9 +11,15 @@ Ant Design React 致力于提供给程序员**愉悦**的开发体验。
## 第一个例子
这是一个最简单的 Ant Design 组件的在线演示。
这是一个最简单的 Ant Design 组件的在线 codesandbox 演示。
<iframe src="https://codesandbox.io/embed/wk04r016q8?fontsize=14" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"></iframe>
<iframe
src="https://codesandbox.io/embed/antd-reproduction-template-6e93z?autoresize=1&fontsize=14&hidenavigation=1&theme=dark"
style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;"
title="antd reproduction template"
allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb"
sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"
/>
### 1. 创建一个 codesandbox

View File

@@ -7,7 +7,7 @@ The default language of `antd@2.x` is English as of yet. If you want to use othe
## ConfigProvider
antd provides a React Component [ConfigProvider](/components/config-provider) for configuring antd locale text globally.
`antd` provides a React Component [ConfigProvider](/components/config-provider) for configuring antd locale text globally.
```jsx
import { ConfigProvider } from 'antd';
@@ -29,7 +29,6 @@ Supported languages:
| Language | Filename |
| --------------------- | -------- |
| Arabic | ar_EG |
| Armenian | hy_AM |
| Bulgarian | bg_BG |
| Catalan | ca_ES |
| Czech | cs_CZ |
@@ -47,12 +46,14 @@ Supported languages:
| Croatian | hr_HR |
| Hindi | hi_IN |
| Hungarian | hu_HU |
| Armenian | hy_AM |
| Indonesian | id_ID |
| Italian | it_IT |
| Icelandic | is_IS |
| Japanese | ja_JP |
| Kannada | kn_IN |
| Korean | ko_KR |
| Latvian | lv_LV |
| Macedonian | mk_MK |
| Norwegian | nb_NO |
| Nepal | ne_NP |
@@ -61,6 +62,8 @@ Supported languages:
| Polish | pl_PL |
| Portuguese (Brazil) | pt_BR |
| Portuguese | pt_PT |
| Romanian | ro_RO |
| Russian | ru_RU |
| Slovak | sk_SK |
| Serbian | sr_RS |
| Slovenian | sl_SI |
@@ -68,8 +71,6 @@ Supported languages:
| Tamil | ta_IN |
| Thai | th_TH |
| Turkish | tr_TR |
| Romanian | ro_RO |
| Russian | ru_RU |
| Ukrainian | uk_UA |
| Vietnamese | vi_VN |
| Chinese (Simplified) | zh_CN |

View File

@@ -28,7 +28,6 @@ return (
| 语言 | 文件名 |
| ---------------- | ------ |
| 阿拉伯语 | ar_EG |
| 亚美尼亚 | hy_AM |
| 保加利亚语 | bg_BG |
| 加泰罗尼亚语 | ca_ES |
| 捷克语 | cs_CZ |
@@ -46,12 +45,14 @@ return (
| 印地语 | hi_IN |
| 克罗地亚语 | hr_HR |
| 匈牙利语 | hu_HU |
| 亚美尼亚 | hy_AM |
| 冰岛语 | is_IS |
| 印度尼西亚语 | id_ID |
| 意大利语 | it_IT |
| 日语 | ja_JP |
| 卡纳达语 | kn_IN |
| 韩语/朝鲜语 | ko_KR |
| 拉脱维亚语 | lv_LV |
| 马其顿语 | mk_MK |
| 挪威语 | nb_NO |
| 尼泊尔语 | ne_NP |
@@ -60,6 +61,8 @@ return (
| 波兰语 | pl_PL |
| 葡萄牙语(巴西) | pt_BR |
| 葡萄牙语 | pt_PT |
| 罗马尼亚语 | ro_RO |
| 俄罗斯语 | ru_RU |
| 斯洛伐克语 | sk_SK |
| 塞尔维亚语 | sr_RS |
| 斯洛文尼亚语 | sl_SI |
@@ -67,8 +70,6 @@ return (
| 泰米尔语 | ta_IN |
| 泰语 | th_TH |
| 土耳其语 | tr_TR |
| 罗马尼亚语 | ro_RO |
| 俄罗斯语 | ru_RU |
| 乌克兰语 | uk_UA |
| 越南语 | vi_VN |
| 简体中文 | zh_CN |

View File

@@ -25,12 +25,14 @@ Following the Ant Design specification, we developed a React UI library `antd` t
---
## Features
## Features
- An enterprise-class UI design language for web applications.
- A set of high-quality React components out of the box.
- Written in TypeScript with complete defined types.
- The whole package of development and design resources and tools.
- 🌈 Enterprise-class UI designed for web applications.
- 📦 A set of high-quality React components out of the box.
- 🛡 Written in TypeScript with predictable static types.
- ⚙️ Whole package of design resources and development tools.
- 🌍 Internationalization support for dozens of languages.
- 🎨 Powerful theme customization in every detail.
## Environment Support

View File

@@ -25,12 +25,14 @@ title: Ant Design of React
---
## 特性
## 特性
- 提炼自企业级中后台产品的交互语言和视觉风格。
- 开箱即用的高质量 React 组件。
- 使用 TypeScript 构建,提供完整的类型定义文件。
- 全链路开发和设计工具体系。
- 🌈 提炼自企业级中后台产品的交互语言和视觉风格。
- 📦 开箱即用的高质量 React 组件。
- 🛡 使用 TypeScript 开发,提供完整的类型定义文件。
- ⚙️ 全链路开发和设计工具体系。
- 🌍 数十个国际化语言支持。
- 🎨 深入每个细节的主题定制能力。
## 支持环境

View File

@@ -59,19 +59,15 @@ $ yarn add antd
Modify `src/App.js`, import Button component from `antd`.
```jsx
import React, { Component } from 'react';
import Button from 'antd/es/button';
import React from 'react';
import { Button } from 'antd';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
}
}
const App = () => (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
export default App;
```
@@ -90,9 +86,11 @@ Add `antd/dist/antd.css` at the top of `src/App.css`.
Ok, you should now see a blue primary button displayed on the page. Next you can choose any components of `antd` to develop your application. Visit other workflows of `create-react-app` at its [User Guide ](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md).
We are successfully running antd components now, go build your own application!
## Advanced Guides
We are successfully running antd components now but in the real world, there are still lots of problems about antd-demo. For instance, we actually import styles of all components in the project which may be a css bundle size issue (It is OK then if you don't care the gzipped 60kb css file size).
In the real world, there are still lots of problems about antd-demo. For instance, we actually import styles of all components in the project which may be a css bundle size issue (It is OK then if you don't care the gzipped 60kb css file size).
Now we need to customize the default webpack config. We can achieve that by using [react-app-rewired](https://github.com/timarney/react-app-rewired) which is one of create-react-app's custom config solutions.

View File

@@ -59,19 +59,15 @@ $ yarn add antd
修改 `src/App.js`,引入 antd 的按钮组件。
```jsx
import React, { Component } from 'react';
import Button from 'antd/es/button';
import React from 'react';
import { Button } from 'antd';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
}
}
const App = () => (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
export default App;
```
@@ -90,9 +86,11 @@ export default App;
好了,现在你应该能看到页面上已经有了 antd 的蓝色按钮组件,接下来就可以继续选用其他组件开发应用了。其他开发流程你可以参考 create-react-app 的[官方文档](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md)。
我们现在已经把 antd 组件成功运行起来了,开始开发你的应用吧!
## 高级配置
我们现在已经把组件成功运行起来了,但是在实际开发过程中还有很多问题,例如上面的例子实际上加载了全部的 antd 组件的样式gzipped 后一共大约 60kb
这个例子在实际开发中还有一些优化的空间,比如无法进行主题配置,而且上面的例子加载了全部的 antd 组件的样式gzipped 后一共大约 60kb
此时我们需要对 create-react-app 的默认配置进行自定义,这里我们使用 [react-app-rewired](https://github.com/timarney/react-app-rewired) (一个对 create-react-app 进行自定义配置的社区解决方案)。

View File

@@ -52,6 +52,11 @@ const LinksList = () => (
<li>
<a href="http://vue.ant.design" target="_blank">Ant Design of Vue<LinkIcon /></a>
</li>
<li>
<a href="https://ecomfe.github.io/santd" target="_blank">
San UI Toolkit for Ant Design<LinkIcon />
</a>
</li>
<li>
<a href="https://github.com/FE-Driver/vue-beauty" target="_blank">
vue-beauty (vue)<LinkIcon />

View File

@@ -53,6 +53,11 @@ const LinksList = () => (
<li>
<a href="http://vue.ant.design" target="_blank">Ant Design of Vue<LinkIcon /></a>
</li>
<li>
<a href="https://ecomfe.github.io/santd" target="_blank">
San UI Toolkit for Ant Design<LinkIcon />
</a>
</li>
<li>
<a href="https://github.com/FE-Driver/vue-beauty" target="_blank">
vue-beauty (vue)<LinkIcon />

View File

@@ -16,9 +16,9 @@ While there is a possibility of too much feedback (or, more accurately, too much
## Lookup Patterns
<img class="preview-img" align="right" alt="example of Certain Category" description="The keyword of the user query is only displayed in three categories, Topics, Questions and Articles." src="https://gw.alipayobjects.com/zos/rmsportal/XlqFYhYiZtWFNImtRElR.png">
<img class="preview-img" align="right" alt="example of Certain Category" description="The keyword of the user query is only displayed in three categories, Topics, Questions and Articles." src="https://gw.alipayobjects.com/zos/rmsportal/czfJRLltwXcsTLlTpytV.png">
<img class="preview-img" align="right" alt="example of Uncertain Category" description="The number of categories the keyword of the user query belongs to is uncertain." src="https://gw.alipayobjects.com/zos/rmsportal/czfJRLltwXcsTLlTpytV.png">
<img class="preview-img" align="right" alt="example of Uncertain Category" description="The number of categories the keyword of the user query belongs to is uncertain." src="https://gw.alipayobjects.com/zos/rmsportal/XlqFYhYiZtWFNImtRElR.png">
Auto Complete: As the user types input into a field, a drop-down menu of matching values is displayed. Depending on the categories of search results, it can be divided into two types, Certain Category and Uncertain Category.

View File

@@ -69,4 +69,4 @@ If actual performance can hardly improved, there is a difference between actual
## Natural Motion
Please refer to [Ant Motion, a motion language](http://motion.ant.design/#/language/).
Please refer to [Ant Motion, a motion language](https://motion.ant.design/language/basic).

View File

@@ -70,4 +70,4 @@ title: 巧用过渡
## 自然运动
参见 [Ant Motion 动画语言](http://motion.ant.design/language/time)。
参见 [Ant Motion 动画语言](https://motion.ant.design/language/basic-cn)。

View File

@@ -1,6 +1,6 @@
{
"name": "antd",
"version": "3.26.3",
"version": "3.26.8",
"description": "An enterprise-class UI design language and React components implementation",
"keywords": [
"ant",
@@ -101,6 +101,7 @@
"css-animation": "^1.5.0",
"dom-closest": "^0.2.0",
"enquire.js": "^2.1.6",
"is-mobile": "^2.1.0",
"lodash": "^4.17.13",
"moment": "^2.24.0",
"omit.js": "^1.0.2",
@@ -148,6 +149,7 @@
"@ant-design/colors": "^3.2.2",
"@ant-design/tools": "^8.0.4",
"@packtracker/webpack-plugin": "^2.0.1",
"@qixian.cs/github-contributors-list": "^1.0.3",
"@sentry/browser": "^5.4.0",
"@stackblitz/sdk": "^1.3.0",
"@types/classnames": "^2.2.8",
@@ -185,7 +187,7 @@
"eslint-config-airbnb": "^18.0.0",
"eslint-config-prettier": "^6.0.0",
"eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "~2.18.2",
"eslint-plugin-import": "~2.19.1",
"eslint-plugin-jest": "^23.0.2",
"eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-markdown": "^1.0.0",
@@ -241,7 +243,7 @@
"stylelint-config-rational-order": "^0.1.2",
"stylelint-config-standard": "^19.0.0",
"stylelint-declaration-block-no-ignored-properties": "^2.1.0",
"stylelint-order": "^3.0.0",
"stylelint-order": "^4.0.0",
"typescript": "~3.7.2",
"xhr-mock": "^2.4.1",
"xhr2": "^0.2.0",

View File

@@ -1,3 +0,0 @@
{
"extends": ["config:base", ":preserveSemverRanges"]
}

View File

@@ -24,7 +24,7 @@ async function checkVersion() {
}
async function checkBranch({ current }) {
if (current !== 'master') {
if (current !== '3.x-stable') {
console.log(chalk.yellow('🤔 You are not in the master branch!'));
exitProcess();
}

View File

@@ -34,14 +34,10 @@ describe('site test', () => {
});
return resp;
};
const handleComponentName = name => {
const componentMap = {
descriptions: 'description list',
};
// eslint-disable-next-line no-unused-vars
const [_, componentName] = name.split('/');
const compName = componentName.toLowerCase().replace('-', '');
return componentMap[compName] || compName;
const componentName = name.split('/')[1];
return componentName.toLowerCase().replace('-', '');
};
const expectComponent = async component => {

View File

@@ -14,6 +14,7 @@ module.exports = {
'app.header.lang': '中文',
'app.content.edit-page': 'Edit this page on GitHub!',
'app.content.edit-demo': 'Edit this demo on GitHub!',
'app.content.contributors': 'contributors',
'app.component.examples': 'Examples',
'app.component.examples.expand': 'Expand all code',
'app.component.examples.collapse': 'Collapse all code',
@@ -53,6 +54,7 @@ module.exports = {
'app.home.recommend': 'Recommend',
'app.home.recommend.yuque': 'Yuque, our favorite documentation tool',
'app.home.recommend.antv.g2plot': 'G2Plot, the new charting library',
'app.home.recommend.antd.next': 'Ant Design 4.0: Creating happy work',
'app.home.more': 'Learn more',
'app.home.more-mobile-react': 'Ant Design Mobile of React',
'app.home.more-mobile-angular': 'Ant Design Mobile of Angular',

View File

@@ -20,7 +20,7 @@ a {
.main-container {
position: relative;
min-height: 500px;
padding: 0 170px 144px 64px;
padding: 0 170px 32px 64px;
overflow: hidden;
background: #fff;
}
@@ -30,8 +30,7 @@ a {
&-inner {
max-height: 100vh;
overflow-x: hidden;
overflow-y: hidden;
overflow: hidden;
}
&:hover &-inner {
@@ -41,7 +40,6 @@ a {
.aside-container {
padding-bottom: 48px;
overflow-x: hidden;
font-family: Avenir, @font-family, sans-serif;
&.ant-menu-inline .ant-menu-submenu-title h4,

View File

@@ -0,0 +1,8 @@
.contributors-list {
margin-top: 120px !important;
a + a,
.ant-avatar + .ant-avatar {
margin-left: 8px;
}
}

View File

@@ -22,4 +22,4 @@
@import './theme';
@import './docsearch';
@import './nprogress';
@import './santa';
@import './contributors';

View File

@@ -28,14 +28,13 @@
}
}
@media only screen and (max-width: 991.99px) {
.main-menu {
> div > .ant-affix {
position: static !important;
}
.main-menu-inner {
max-height: none;
overflow: hidden;
@media only screen and (max-width: @screen-lg) {
.main-container {
padding-right: 48px;
padding-left: 48px;
.toc-affix {
display: none;
}
}
.code-boxes-col-2-1,

View File

@@ -11,7 +11,7 @@ import { ping, getMetaDescription } from '../utils';
class ComponentDoc extends React.Component {
state = {
expandAll: false,
visibleAll: false,
visibleAll: process.env.NODE_ENV !== 'production',
showRiddleButton: false,
};

View File

@@ -1,7 +1,8 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Link } from 'bisheng/router';
import { Row, Col, Menu, Icon, Affix } from 'antd';
import { Row, Col, Menu, Icon, Affix, Tooltip, Avatar } from 'antd';
import ContributorsList from '@qixian.cs/github-contributors-list';
import { FormattedMessage, injectIntl } from 'react-intl';
import classNames from 'classnames';
import get from 'lodash/get';
@@ -283,7 +284,12 @@ class MainContent extends Component {
render() {
const { isMobile } = this.context;
const { openKeys } = this.state;
const { localizedPageData, demos } = this.props;
const {
localizedPageData,
demos,
intl: { formatMessage },
} = this.props;
const { meta } = localizedPageData;
const activeMenuItem = this.getActiveMenuItem();
const menuItems = this.getMenuItems();
const menuItemsForFooterNav = this.getMenuItems({
@@ -310,30 +316,49 @@ class MainContent extends Component {
<div className="main-wrapper">
<Row>
{isMobile ? (
<MobileMenu
iconChild={[
<Icon key="menu-unfold" type="menu-unfold" />,
<Icon key="menu-fold" type="menu-fold" />,
]}
key="Mobile-menu"
wrapperClassName="drawer-wrapper"
>
<MobileMenu key="Mobile-menu" wrapperClassName="drawer-wrapper">
{menuChild}
</MobileMenu>
) : (
<Col xxl={4} xl={5} lg={6} md={24} sm={24} xs={24} className="main-menu">
<Col xxl={4} xl={5} lg={6} md={6} sm={24} xs={24} className="main-menu">
<Affix>
<section className="main-menu-inner">{menuChild}</section>
</Affix>
</Col>
)}
<Col xxl={20} xl={19} lg={18} md={24} sm={24} xs={24}>
<Col xxl={20} xl={19} lg={18} md={18} sm={24} xs={24}>
<section className={mainContainerClass}>
{demos ? (
<ComponentDoc {...this.props} doc={localizedPageData} demos={demos} />
) : (
<Article {...this.props} content={localizedPageData} />
)}
<ContributorsList
className="contributors-list"
fileName={meta.filename}
renderItem={(item, loading) =>
loading ? (
<Avatar style={{ opacity: 0.3 }} />
) : (
<Tooltip
title={`${formatMessage({ id: 'app.content.contributors' })}: ${
item.username
}`}
key={item.username}
>
<a
href={`https://github.com/${item.username}`}
target="_blank"
rel="noopener noreferrer"
>
<Avatar src={item.url}>{item.username}</Avatar>
</a>
</Tooltip>
)
}
repo="ant-design"
owner="ant-design"
/>
</section>
<PrevAndNext prev={prev} next={next} />
<Footer />

View File

@@ -97,19 +97,19 @@ const Banner = ({ isMobile }) => {
<FormattedMessage id="app.home.recommend" />
</Divider>
<a
href="https://github.com/antvis/G2Plot?from=antd"
href="https://github.com/antvis/g2plot?from=antd"
target="_blank"
rel="noopener noreferrer"
onClick={() => {
if (window.gtag) {
window.gtag('event', '点击', {
event_category: '首页推广',
event_label: `https://github.com/antvis/G2Plot?from=antd`,
event_label: `https://github.com/antvis/g2plot?from=antd`,
});
}
}}
>
<img src="https://antv.vision/icons/icon-512x512.png" alt="AntV logo" />
<img src="https://antv.vision/icons/icon-512x512.png" alt="antv logo" />
<FormattedMessage id="app.home.recommend.antv.g2plot" />
<Icon type="right" style={{ marginLeft: 6, fontSize: 12, opacity: 0.6 }} />
</a>

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