mirror of
https://github.com/ant-design/ant-design.git
synced 2026-02-17 14:52:27 +08:00
Compare commits
119 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b6fc0168db | ||
|
|
92fe411961 | ||
|
|
ab29ecb377 | ||
|
|
23d5a856c0 | ||
|
|
6e4fa95d0f | ||
|
|
2753ce91c9 | ||
|
|
057f5b8526 | ||
|
|
d3eea22097 | ||
|
|
da2f54a18a | ||
|
|
e5dd231aaa | ||
|
|
c6eafe8380 | ||
|
|
0520b844d5 | ||
|
|
8dd91ca648 | ||
|
|
44c9bcafc9 | ||
|
|
4df1cd3db2 | ||
|
|
2f7c895675 | ||
|
|
c513296849 | ||
|
|
2416f733bf | ||
|
|
d102c2bf7a | ||
|
|
2adf8ced24 | ||
|
|
528f1df5d6 | ||
|
|
4297f33e85 | ||
|
|
8ea9356399 | ||
|
|
bcb71b8b78 | ||
|
|
121437b666 | ||
|
|
8e793c431f | ||
|
|
89472751a7 | ||
|
|
df8f34309f | ||
|
|
670bd4bf5b | ||
|
|
75ed2e0745 | ||
|
|
2f72e472e5 | ||
|
|
77dc5fa4e7 | ||
|
|
9ea5fb3050 | ||
|
|
847f5fcd31 | ||
|
|
44a63acf13 | ||
|
|
1ae09841e9 | ||
|
|
dc3bf75452 | ||
|
|
b826157e73 | ||
|
|
088ca07ff0 | ||
|
|
f4fd7cf0da | ||
|
|
0a00c5e22a | ||
|
|
92169c4853 | ||
|
|
74082defe9 | ||
|
|
f98debaeee | ||
|
|
6e27c62eb3 | ||
|
|
38dab1f725 | ||
|
|
f14f934c3d | ||
|
|
32744e733c | ||
|
|
ea9e9fb410 | ||
|
|
7a2d1f2017 | ||
|
|
aa0b1c5378 | ||
|
|
ced537df48 | ||
|
|
930ad2eb40 | ||
|
|
cc8ab225cc | ||
|
|
b03e93d061 | ||
|
|
7743c2b326 | ||
|
|
b97e9cb6d4 | ||
|
|
edefe8eb66 | ||
|
|
15f75e1c55 | ||
|
|
333f63bd05 | ||
|
|
f805d2e292 | ||
|
|
9fa72ab74d | ||
|
|
6666520243 | ||
|
|
d7d4beb280 | ||
|
|
9a4a668a05 | ||
|
|
32cf75cca2 | ||
|
|
7cb4d4b411 | ||
|
|
65ea68843e | ||
|
|
1958b78ecc | ||
|
|
a90e447758 | ||
|
|
b02d80d60f | ||
|
|
0a5ec6713c | ||
|
|
f459ae9e63 | ||
|
|
6301c20f6c | ||
|
|
fdc6070b50 | ||
|
|
721d8cb4a0 | ||
|
|
b0d55c8861 | ||
|
|
20ef1f199c | ||
|
|
62839eb426 | ||
|
|
2f7998cc0c | ||
|
|
fee211e3c4 | ||
|
|
8188956193 | ||
|
|
57cb4a460b | ||
|
|
fd6d1796ed | ||
|
|
e01e545dcd | ||
|
|
13fb839032 | ||
|
|
85fcf0fe6e | ||
|
|
0b1a5409bd | ||
|
|
ea1f00d19f | ||
|
|
bef81beba6 | ||
|
|
b875f2ac83 | ||
|
|
408fbb41e5 | ||
|
|
850a5b4567 | ||
|
|
ab36853cb7 | ||
|
|
9b65863512 | ||
|
|
adf5288524 | ||
|
|
4300c046a0 | ||
|
|
fb68fcdc05 | ||
|
|
4146efa810 | ||
|
|
8fda3972fe | ||
|
|
89a6593c44 | ||
|
|
14619bc1d8 | ||
|
|
5fabb45d9d | ||
|
|
62d7a2bbb0 | ||
|
|
bca69b6e8c | ||
|
|
fac56ee952 | ||
|
|
3fed6f02a5 | ||
|
|
43bf7965de | ||
|
|
407dfda998 | ||
|
|
811d562527 | ||
|
|
16ac3b31df | ||
|
|
85b6744bf6 | ||
|
|
f2cae4361e | ||
|
|
0ab55ce884 | ||
|
|
ecce1e4aba | ||
|
|
6096f6e281 | ||
|
|
cba968f9dc | ||
|
|
be06f53e23 | ||
|
|
400ca638b3 |
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"sandboxes": ["wk04r016q8"]
|
||||
"sandboxes": ["antd-reproduction-template-6e93z"]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
components/**/*.js
|
||||
components/**/*.jsx
|
||||
components/*/__tests__/type.tsx
|
||||
!components/*/__tests__/**/*.js
|
||||
!components/*/demo/*
|
||||
!.*.js
|
||||
|
||||
@@ -55,6 +55,7 @@ const eslintrc = {
|
||||
'jsx-a11y/anchor-has-content': 0,
|
||||
'jsx-a11y/click-events-have-key-events': 0,
|
||||
'jsx-a11y/anchor-is-valid': 0,
|
||||
'jsx-a11y/no-noninteractive-element-interactions': 0,
|
||||
'comma-dangle': ['error', 'always-multiline'],
|
||||
'react/jsx-filename-extension': 0,
|
||||
'react/state-in-constructor': 0,
|
||||
@@ -86,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,
|
||||
|
||||
6
.github/workflows/deploy-site.yml
vendored
6
.github/workflows/deploy-site.yml
vendored
@@ -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:
|
||||
|
||||
19
.github/workflows/lighthouse-ci.yml
vendored
Normal file
19
.github/workflows/lighthouse-ci.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: Lighthouse
|
||||
on: push
|
||||
jobs:
|
||||
lighthouse:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Audit URLs using Lighthouse
|
||||
uses: treosh/lighthouse-ci-action@v2
|
||||
with:
|
||||
urls: |
|
||||
https://ant.design
|
||||
https://ant.design/docs/react/introduce-cn
|
||||
https://ant.design/components/button-cn
|
||||
- name: Save results
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: lighthouse-results
|
||||
path: '.lighthouseci' # This will save the Lighthouse results as .json files
|
||||
2
.jest.js
2
.jest.js
@@ -31,7 +31,7 @@ module.exports = {
|
||||
'!components/*/style/index.tsx',
|
||||
'!components/style/index.tsx',
|
||||
'!components/*/locale/index.tsx',
|
||||
'!components/*/__tests__/**/type.tsx',
|
||||
'!components/*/__tests__/type.test.tsx',
|
||||
'!components/**/*/interface.{ts,tsx}',
|
||||
],
|
||||
transformIgnorePatterns,
|
||||
|
||||
246
AUTHORS.txt
246
AUTHORS.txt
@@ -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>
|
||||
|
||||
@@ -15,6 +15,86 @@ timeline: true
|
||||
|
||||
---
|
||||
|
||||
## 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`
|
||||
|
||||
- 🛠 support `unpkg` field in `package.json`. [#20193](https://github.com/ant-design/ant-design/pull/20193)
|
||||
- 🐞 Fix Tree `showLine` and `showIcon` missing icon. [#20196](https://github.com/ant-design/ant-design/pull/20196)
|
||||
- 🐞 Fix Modal combine Drawer cause invalid scroll problem. [#20242](https://github.com/ant-design/ant-design/pull/20242)
|
||||
- 🐞 Fix Drawer `switchScrollingEffect prop on a DOM element` warning. [#20175](https://github.com/ant-design/ant-design/pull/20175)
|
||||
- 🐞 Fix Select Option `label` definition. [#20190](https://github.com/ant-design/ant-design/pull/20190) [@ZhechenLi](https://github.com/ZhechenLi)
|
||||
- 💄 Optimize Form feedback icon padding. [#20164](https://github.com/ant-design/ant-design/pull/20164) [@Satloff](https://github.com/Satloff)
|
||||
- 💄 Add less variables for Select/Cascader to optimize dropdown padding and border radius. [#20156](https://github.com/ant-design/ant-design/pull/20156) [@Satloff](https://github.com/Satloff)
|
||||
|
||||
## 3.26.2
|
||||
|
||||
`2019-12-10`
|
||||
|
||||
- 🐞 Fix DatePicker `disabledTime` TypeScript definition to be optional. [#20153](https://github.com/ant-design/ant-design/pull/20153) [@khaledkhalil94](https://github.com/khaledkhalil94)
|
||||
- 🐞 Fix Transfer's `title` of `dataSource` TypeScript definition to be optional. [#20144](https://github.com/ant-design/ant-design/pull/20144) [@mraiguo](https://github.com/mraiguo)
|
||||
|
||||
## 3.26.1
|
||||
|
||||
`2019-12-09`
|
||||
|
||||
- 🐞 Fix List pagination options text align. [#20037](https://github.com/ant-design/ant-design/issues/20037)
|
||||
- 🐞 Fix Button text not align well in Chrome. [#20059](https://github.com/ant-design/ant-design/pull/20059)
|
||||
- 🐞 Fix DescriptionItem `className` error applied to label. [#20067](https://github.com/ant-design/ant-design/pull/20067) [@Liu-Ya](https://github.com/Liu-Ya)
|
||||
- 🐞 Fix Tree duplicated icons when `showLine` is true. [#20090](https://github.com/ant-design/ant-design/issues/20090)
|
||||
- 🐞 Fix Editable Typography flush in Firefox. [#20118](https://github.com/ant-design/ant-design/pull/20118)
|
||||
- 🐞 Improve Icon `component` definition to be compatible with create-react-app svg component. [#20142](https://github.com/ant-design/ant-design/pull/20142)
|
||||
- Table
|
||||
- 🐞 Fix small table header border missing. [#20030](https://github.com/ant-design/ant-design/issues/20030)
|
||||
- 🐞 Fix `filterIcon` throws error when render string or number.
|
||||
- 🐞 Fix `filterIcon` shows wrong title when returns Tooltip. [#20049](https://github.com/ant-design/ant-design/issues/20049)
|
||||
- 🐞 Fix columns have 9px align issue in Windows Chrome. [#19952](https://github.com/ant-design/ant-design/issues/19952)
|
||||
|
||||
## 3.26.0
|
||||
|
||||
`2019-12-01`
|
||||
|
||||
@@ -15,6 +15,86 @@ timeline: true
|
||||
|
||||
---
|
||||
|
||||
## 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`
|
||||
|
||||
- 🛠 antd `package.json` 中补充 `unpkg` 字段。[#20193](https://github.com/ant-design/ant-design/pull/20193)
|
||||
- 🐞 修复 Tree `showLine` 和 `showIcon` 同时开启时 `[+]` `[-]` 图标丢失的问题。[#20196](https://github.com/ant-design/ant-design/pull/20196)
|
||||
- 🐞 修复 Modal 和 Drawer 结合使用时导致滚动失效的问题。[#20242](https://github.com/ant-design/ant-design/pull/20242)
|
||||
- 🐞 修复 Drawer `switchScrollingEffect prop on a DOM element` 警告。[#20175](https://github.com/ant-design/ant-design/pull/20175)
|
||||
- 🐞 修复 Select Option 的 `label` 属性定义。[#20190](https://github.com/ant-design/ant-design/pull/20190) [@ZhechenLi](https://github.com/ZhechenLi)
|
||||
- 💄 优化 Form 反馈图标的间距样式。[#20164](https://github.com/ant-design/ant-design/pull/20164) [@Satloff](https://github.com/Satloff)
|
||||
- 💄 Select/Cascader 新增和优化边距 padding 和圆角的相关 less 变量。[#20156](https://github.com/ant-design/ant-design/pull/20156) [@Satloff](https://github.com/Satloff)
|
||||
|
||||
## 3.26.2
|
||||
|
||||
`2019-12-10`
|
||||
|
||||
- 🐞 修正 DatePicker `disabledTime` 属性 TypeScript 定义为可选。[#20153](https://github.com/ant-design/ant-design/pull/20153) [@khaledkhalil94](https://github.com/khaledkhalil94)
|
||||
- 🐞 修正 Transfer `dataSource` 的 `title` 属性 TypeScript 定义为可选。[#20144](https://github.com/ant-design/ant-design/pull/20144) [@mraiguo](https://github.com/mraiguo)
|
||||
|
||||
## 3.26.1
|
||||
|
||||
`2019-12-09`
|
||||
|
||||
- 🐞 修复 List 下分页选项文本对齐问题。[#20037](https://github.com/ant-design/ant-design/issues/20037)
|
||||
- 🐞 修复 Chrome 下 Button 文字没有垂直居中的问题。[#20059](https://github.com/ant-design/ant-design/pull/20059)
|
||||
- 🐞 修复 DescriptionItem 的 `className` 错误应用于 label。[#20067](https://github.com/ant-design/ant-design/pull/20067) [@Liu-Ya](https://github.com/Liu-Ya)
|
||||
- 🐞 修复 Tree `showLine` 为 true 时展示多余图标的问题。[#20090](https://github.com/ant-design/ant-design/issues/20090)
|
||||
- 🐞 修复 Typography 可编辑组件在 Firefox 下闪动的问题。[#20118](https://github.com/ant-design/ant-design/pull/20118)
|
||||
- 🐞 修复 Icon `component` 的定义,使其兼容于 create-react-app 的 svg 组件定义。[#20142](https://github.com/ant-design/ant-design/pull/20142)
|
||||
- Table
|
||||
- 🐞 修复小号 Table 表头边框丢失的问题。[#20030](https://github.com/ant-design/ant-design/issues/20030)
|
||||
- 🐞 修复 `filterIcon` 返回字符串或数字时报错的问题。
|
||||
- 🐞 修复 `filterIcon` 返回 Tooltip 时显示了错误的 `title`。[#20049](https://github.com/ant-design/ant-design/issues/20049)
|
||||
- 🐞 修复在 Windows Chrome 下固定列有 9px 的对齐问题。[#19952](https://github.com/ant-design/ant-design/issues/19952)
|
||||
|
||||
## 3.26.0
|
||||
|
||||
`2019-12-01`
|
||||
|
||||
@@ -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
|
||||
|
||||
[](https://issuehunt.io/repos/34526884)
|
||||
|
||||
## 社区互助
|
||||
## 👥 社区互助
|
||||
|
||||
如果您在使用的过程中碰到问题,可以通过下面几个途径寻求帮助,同时我们也鼓励资深用户通过下面的途径给新人提供帮助。
|
||||
|
||||
|
||||
28
README.md
28
README.md
@@ -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
|
||||
|
||||
|
||||
@@ -12,7 +12,15 @@
|
||||
// Button styles
|
||||
// -----------------------------
|
||||
.@{btn-prefix-cls} {
|
||||
line-height: @line-height-base;
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/12978
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/20058
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/19972
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/12978
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/18107
|
||||
// Fixing https://github.com/ant-design/ant-design/issues/13214
|
||||
// It is a render problem of chrome, which is only happened in the codesandbox demo
|
||||
// 0.001px solution works and I don't why
|
||||
line-height: @line-height-base - 0.001;
|
||||
.btn;
|
||||
.btn-default;
|
||||
|
||||
@@ -73,6 +81,10 @@
|
||||
|
||||
&-icon-only {
|
||||
.btn-square(@btn-prefix-cls);
|
||||
|
||||
> i {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
&-round {
|
||||
|
||||
@@ -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>,
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
&-menus {
|
||||
position: absolute;
|
||||
z-index: @zindex-dropdown;
|
||||
font-size: @font-size-base;
|
||||
font-size: @cascader-dropdown-font-size;
|
||||
white-space: nowrap;
|
||||
background: @component-background;
|
||||
border-radius: @border-radius-base;
|
||||
@@ -134,7 +134,6 @@
|
||||
ul,
|
||||
ol {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
@@ -165,7 +164,7 @@
|
||||
min-width: 111px;
|
||||
height: 180px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding: @cascader-dropdown-edge-child-vertical-padding 0;
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
list-style: none;
|
||||
@@ -185,8 +184,8 @@
|
||||
}
|
||||
}
|
||||
&-menu-item {
|
||||
padding: 5px @control-padding-horizontal;
|
||||
line-height: 22px;
|
||||
padding: @cascader-dropdown-vertical-padding @control-padding-horizontal;
|
||||
line-height: @cascader-dropdown-line-height;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s;
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
}
|
||||
|
||||
&-borderless {
|
||||
background-color: @component-background;
|
||||
background-color: @collapse-header-bg;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -8153,7 +8153,9 @@ exports[`ConfigProvider components Menu prefixCls 1`] = `
|
||||
|
||||
exports[`ConfigProvider components Modal configProvider 1`] = `
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="config-modal-root"
|
||||
>
|
||||
<div
|
||||
class="config-modal-mask"
|
||||
/>
|
||||
@@ -8245,7 +8247,9 @@ exports[`ConfigProvider components Modal configProvider 1`] = `
|
||||
|
||||
exports[`ConfigProvider components Modal normal 1`] = `
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="ant-modal-root"
|
||||
>
|
||||
<div
|
||||
class="ant-modal-mask"
|
||||
/>
|
||||
@@ -8337,7 +8341,9 @@ exports[`ConfigProvider components Modal normal 1`] = `
|
||||
|
||||
exports[`ConfigProvider components Modal prefixCls 1`] = `
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="prefix-Modal-root"
|
||||
>
|
||||
<div
|
||||
class="prefix-Modal-mask"
|
||||
/>
|
||||
@@ -8611,7 +8617,7 @@ exports[`ConfigProvider components Pagination configProvider 1`] = `
|
||||
<div
|
||||
class="config-pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -8747,7 +8753,7 @@ exports[`ConfigProvider components Pagination configProvider 1`] = `
|
||||
<div
|
||||
class="config-pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -8888,7 +8894,7 @@ exports[`ConfigProvider components Pagination normal 1`] = `
|
||||
<div
|
||||
class="ant-pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -9024,7 +9030,7 @@ exports[`ConfigProvider components Pagination normal 1`] = `
|
||||
<div
|
||||
class="ant-pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -9165,7 +9171,7 @@ exports[`ConfigProvider components Pagination prefixCls 1`] = `
|
||||
<div
|
||||
class="prefix-Pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -9301,7 +9307,7 @@ exports[`ConfigProvider components Pagination prefixCls 1`] = `
|
||||
<div
|
||||
class="prefix-Pagination-options-quick-jumper"
|
||||
>
|
||||
Goto
|
||||
Go to
|
||||
<input
|
||||
type="text"
|
||||
value=""
|
||||
@@ -11598,7 +11604,7 @@ exports[`ConfigProvider components Table configProvider 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="config-table-column-has-actions config-table-column-has-filters config-table-column-has-sorters"
|
||||
class="config-table-column-has-actions config-table-column-has-filters config-table-column-has-sorters config-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="config-table-header-column"
|
||||
@@ -11844,7 +11850,7 @@ exports[`ConfigProvider components Table normal 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -12090,7 +12096,7 @@ exports[`ConfigProvider components Table prefixCls 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="prefix-Table-column-has-actions prefix-Table-column-has-filters prefix-Table-column-has-sorters"
|
||||
class="prefix-Table-column-has-actions prefix-Table-column-has-filters prefix-Table-column-has-sorters prefix-Table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="prefix-Table-header-column"
|
||||
@@ -12745,7 +12751,6 @@ Array [
|
||||
>
|
||||
<input
|
||||
class="config-time-picker-input"
|
||||
id=""
|
||||
placeholder="Select time"
|
||||
type="text"
|
||||
value=""
|
||||
@@ -13836,7 +13841,6 @@ Array [
|
||||
>
|
||||
<input
|
||||
class="ant-time-picker-input"
|
||||
id=""
|
||||
placeholder="Select time"
|
||||
type="text"
|
||||
value=""
|
||||
@@ -14927,7 +14931,6 @@ Array [
|
||||
>
|
||||
<input
|
||||
class="prefix-TimePicker-input"
|
||||
id=""
|
||||
placeholder="Select time"
|
||||
type="text"
|
||||
value=""
|
||||
|
||||
@@ -50,3 +50,23 @@ Some components use dynamic style to support wave effect. You can config `csp` p
|
||||
#### Does the locale problem still exist in DatePicker even if ConfigProvider `locale` is used?
|
||||
|
||||
Please make sure you set moment locale by `moment.locale('zh-cn')` or that you don't have two different versions of moment.
|
||||
|
||||
#### Modal throw error when setting `getPopupContainer`?
|
||||
|
||||
Related issue: https://github.com/ant-design/ant-design/issues/19974
|
||||
|
||||
When you config `getPopupContainer` to parentNode globally, Modal will throw error of `triggerNode is undefined` because it did not have a triggerNode. You can try the [fix](https://github.com/afc163/feedback-antd/commit/3e4d1ad1bc1a38460dc3bf3c56517f737fe7d44a) below.
|
||||
|
||||
```diff
|
||||
<ConfigProvider
|
||||
- getPopupContainer={triggerNode => triggerNode.parentNode}
|
||||
+ getPopupContainer={node => {
|
||||
+ if (node) {
|
||||
+ return node.parentNode;
|
||||
+ }
|
||||
+ return document.body;
|
||||
+ }}
|
||||
>
|
||||
<App />
|
||||
</ConfigProvider>
|
||||
```
|
||||
|
||||
@@ -51,3 +51,23 @@ return (
|
||||
#### 为什么我使用了 ConfigProvider `locale`,时间类组件的国际化还有问题?
|
||||
|
||||
请检查是否设置了 `moment.locale('zh-cn')`,或者是否有两个版本的 moment 共存。
|
||||
|
||||
#### 配置 `getPopupContainer` 导致 Modal 报错?
|
||||
|
||||
相关 issue:https://github.com/ant-design/ant-design/issues/19974
|
||||
|
||||
当如下全局设置 `getPopupContainer` 为触发节点的 parentNode 时,由于 Modal 的用法不存在 `triggerNode`,这样会导致 `triggerNode is undefined` 的报错,需要增加一个[判断条件](https://github.com/afc163/feedback-antd/commit/3e4d1ad1bc1a38460dc3bf3c56517f737fe7d44a)。
|
||||
|
||||
```diff
|
||||
<ConfigProvider
|
||||
- getPopupContainer={triggerNode => triggerNode.parentNode}
|
||||
+ getPopupContainer={node => {
|
||||
+ if (node) {
|
||||
+ return node.parentNode;
|
||||
+ }
|
||||
+ return document.body;
|
||||
+ }}
|
||||
>
|
||||
<App />
|
||||
</ConfigProvider>
|
||||
```
|
||||
|
||||
@@ -31,7 +31,7 @@ function getShowDateFromValue(value: RangePickerValue, mode?: string | string[])
|
||||
if (mode && mode[0] === 'month') {
|
||||
return [start, end] as RangePickerValue;
|
||||
}
|
||||
const newEnd = end && end.isSame(start, 'month') ? end.clone().add(1, 'month') : end;
|
||||
const newEnd = end && end.isSame(start!, 'month') ? end.clone().add(1, 'month') : end;
|
||||
return [start, newEnd] as RangePickerValue;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ class RangePicker extends React.Component<RangePickerProps, RangePickerState> {
|
||||
showDate: getShowDateFromValue(value) || showDate,
|
||||
}));
|
||||
}
|
||||
if (value[0] && value[0].diff(value[1]) > 0) {
|
||||
if (value[0] && value[1] && value[0].diff(value[1]) > 0) {
|
||||
value[1] = undefined;
|
||||
}
|
||||
const [start, end] = value;
|
||||
|
||||
@@ -23,7 +23,7 @@ export interface PickerProps {
|
||||
getCalendarContainer?: (triggerNode: Element) => HTMLElement;
|
||||
open?: boolean;
|
||||
onOpenChange?: (status: boolean) => void;
|
||||
disabledDate?: (current: moment.Moment | undefined) => boolean;
|
||||
disabledDate?: (current: moment.Moment | null) => boolean;
|
||||
dateRender?: (current: moment.Moment, today: moment.Moment) => React.ReactNode;
|
||||
autoFocus?: boolean;
|
||||
onFocus?: React.FocusEventHandler;
|
||||
@@ -31,9 +31,9 @@ export interface PickerProps {
|
||||
}
|
||||
|
||||
export interface SinglePickerProps {
|
||||
value?: moment.Moment;
|
||||
defaultValue?: moment.Moment;
|
||||
defaultPickerValue?: moment.Moment;
|
||||
value?: moment.Moment | null;
|
||||
defaultValue?: moment.Moment | null;
|
||||
defaultPickerValue?: moment.Moment | null;
|
||||
placeholder?: string;
|
||||
renderExtraFooter?: (mode: DatePickerMode) => React.ReactNode;
|
||||
onChange?: (date: moment.Moment | null, dateString: string) => void;
|
||||
@@ -47,15 +47,15 @@ export interface DatePickerProps extends PickerProps, SinglePickerProps {
|
||||
showToday?: boolean;
|
||||
open?: boolean;
|
||||
disabledTime?: (
|
||||
current: moment.Moment | undefined,
|
||||
current?: moment.Moment | null,
|
||||
) => {
|
||||
disabledHours?: () => number[];
|
||||
disabledMinutes?: () => number[];
|
||||
disabledSeconds?: () => number[];
|
||||
};
|
||||
onOpenChange?: (status: boolean) => void;
|
||||
onPanelChange?: (value: moment.Moment | undefined, mode: DatePickerMode) => void;
|
||||
onOk?: (selectedTime: moment.Moment) => void;
|
||||
onPanelChange?: (value: moment.Moment | null, mode: DatePickerMode) => void;
|
||||
onOk?: (selectedTime: moment.Moment | null) => void;
|
||||
mode?: DatePickerMode;
|
||||
}
|
||||
|
||||
@@ -65,9 +65,12 @@ export interface MonthPickerProps extends PickerProps, SinglePickerProps {
|
||||
|
||||
export type RangePickerValue =
|
||||
| undefined[]
|
||||
| null[]
|
||||
| [moment.Moment]
|
||||
| [undefined, moment.Moment]
|
||||
| [moment.Moment, undefined]
|
||||
| [null, moment.Moment]
|
||||
| [moment.Moment, null]
|
||||
| [moment.Moment, moment.Moment];
|
||||
export type RangePickerPresetRange = RangePickerValue | (() => RangePickerValue);
|
||||
|
||||
@@ -90,7 +93,7 @@ export interface RangePickerProps extends PickerProps {
|
||||
mode?: string | string[];
|
||||
separator?: React.ReactNode;
|
||||
disabledTime?: (
|
||||
current: moment.Moment | undefined,
|
||||
current: RangePickerValue,
|
||||
type: string,
|
||||
) => {
|
||||
disabledHours?: () => number[];
|
||||
|
||||
@@ -14,7 +14,7 @@ const Col: React.SFC<ColProps> = props => {
|
||||
const { child, bordered, colon, type, layout } = props;
|
||||
const { prefixCls, label, className, children, span = 1 } = child.props;
|
||||
const labelProps: any = {
|
||||
className: classNames(`${prefixCls}-item-label`, className, {
|
||||
className: classNames(`${prefixCls}-item-label`, {
|
||||
[`${prefixCls}-item-colon`]: colon,
|
||||
[`${prefixCls}-item-no-label`]: !label,
|
||||
}),
|
||||
|
||||
@@ -192,7 +192,7 @@ exports[`Descriptions Descriptions.Item support className 1`] = `
|
||||
colSpan={1}
|
||||
>
|
||||
<span
|
||||
className="ant-descriptions-item-label my-class ant-descriptions-item-colon"
|
||||
className="ant-descriptions-item-label ant-descriptions-item-colon"
|
||||
key="label"
|
||||
>
|
||||
Product
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
category: Components
|
||||
type: Data Display
|
||||
title: Description List
|
||||
title: Descriptions
|
||||
cols: 1
|
||||
---
|
||||
|
||||
|
||||
@@ -29,12 +29,12 @@ exports[`renders ./components/dropdown/demo/basic.md correctly 1`] = `
|
||||
`;
|
||||
|
||||
exports[`renders ./components/dropdown/demo/context-menu.md correctly 1`] = `
|
||||
<span
|
||||
<div
|
||||
class="ant-dropdown-trigger"
|
||||
style="user-select:none"
|
||||
style="text-align:center;background:#f7f7f7;height:200px;line-height:200px;color:#777"
|
||||
>
|
||||
Right Click on Me
|
||||
</span>
|
||||
Right Click on here
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`renders ./components/dropdown/demo/dropdown-button.md correctly 1`] = `
|
||||
|
||||
@@ -26,7 +26,17 @@ const menu = (
|
||||
|
||||
ReactDOM.render(
|
||||
<Dropdown overlay={menu} trigger={['contextMenu']}>
|
||||
<span style={{ userSelect: 'none' }}>Right Click on Me</span>
|
||||
<div
|
||||
style={{
|
||||
textAlign: 'center',
|
||||
background: '#f7f7f7',
|
||||
height: 200,
|
||||
lineHeight: '200px',
|
||||
color: '#777',
|
||||
}}
|
||||
>
|
||||
Right Click on here
|
||||
</div>
|
||||
</Dropdown>,
|
||||
mountNode,
|
||||
);
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
&-menu {
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 4px 0;
|
||||
padding: @dropdown-edge-child-vertical-padding 0;
|
||||
text-align: left;
|
||||
list-style-type: none;
|
||||
background-color: @component-background;
|
||||
@@ -113,6 +113,18 @@
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
& when (@dropdown-edge-child-vertical-padding = 0) {
|
||||
border-radius: @border-radius-base @border-radius-base 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
& when (@dropdown-edge-child-vertical-padding = 0) {
|
||||
border-radius: 0 0 @border-radius-base @border-radius-base;
|
||||
}
|
||||
}
|
||||
|
||||
&-selected,
|
||||
&-selected > a {
|
||||
color: @dropdown-selected-color;
|
||||
|
||||
@@ -513,7 +513,7 @@ exports[`renders ./components/empty/demo/config-provider.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -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>
|
||||
`;
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import React from 'react';
|
||||
import { mount, render } from 'enzyme';
|
||||
import Form from '..';
|
||||
import mountTest from '../../../tests/shared/mountTest';
|
||||
import './type.test';
|
||||
|
||||
describe('Form', () => {
|
||||
mountTest(Form);
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import * as React from 'react';
|
||||
import Form, { FormComponentProps, FormCreateOption } from '../Form';
|
||||
|
||||
describe('Form TypeScript test', async () => {
|
||||
it('empty test case placeholder to avoid jest error', () => {
|
||||
// empty
|
||||
});
|
||||
});
|
||||
|
||||
// test Form.create on component without own props
|
||||
class WithoutOwnProps extends React.Component<any, any> {
|
||||
state = {
|
||||
@@ -31,69 +31,41 @@ import { Form, Input, Select, Button } from 'antd';
|
||||
const { Option } = Select;
|
||||
|
||||
class PriceInput extends React.Component {
|
||||
static getDerivedStateFromProps(nextProps) {
|
||||
// Should be a controlled component.
|
||||
if ('value' in nextProps) {
|
||||
return {
|
||||
...(nextProps.value || {}),
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
const value = props.value || {};
|
||||
this.state = {
|
||||
number: value.number || 0,
|
||||
currency: value.currency || 'rmb',
|
||||
};
|
||||
}
|
||||
|
||||
handleNumberChange = e => {
|
||||
const number = parseInt(e.target.value || 0, 10);
|
||||
if (isNaN(number)) {
|
||||
return;
|
||||
}
|
||||
if (!('value' in this.props)) {
|
||||
this.setState({ number });
|
||||
}
|
||||
this.triggerChange({ number });
|
||||
};
|
||||
|
||||
handleCurrencyChange = currency => {
|
||||
if (!('value' in this.props)) {
|
||||
this.setState({ currency });
|
||||
}
|
||||
this.triggerChange({ currency });
|
||||
};
|
||||
|
||||
triggerChange = changedValue => {
|
||||
// Should provide an event to pass value to Form.
|
||||
const { onChange } = this.props;
|
||||
const { onChange, value } = this.props;
|
||||
if (onChange) {
|
||||
onChange({
|
||||
...this.state,
|
||||
...value,
|
||||
...changedValue,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { size } = this.props;
|
||||
const { currency, number } = this.state;
|
||||
const { size, value } = this.props;
|
||||
return (
|
||||
<span>
|
||||
<Input
|
||||
type="text"
|
||||
size={size}
|
||||
value={number}
|
||||
value={value.number}
|
||||
onChange={this.handleNumberChange}
|
||||
style={{ width: '65%', marginRight: '3%' }}
|
||||
/>
|
||||
<Select
|
||||
value={currency}
|
||||
value={value.currency}
|
||||
size={size}
|
||||
style={{ width: '32%' }}
|
||||
onChange={this.handleCurrencyChange}
|
||||
@@ -118,8 +90,7 @@ class Demo extends React.Component {
|
||||
|
||||
checkPrice = (rule, value, callback) => {
|
||||
if (value.number > 0) {
|
||||
callback();
|
||||
return;
|
||||
return callback();
|
||||
}
|
||||
callback('Price must greater than zero!');
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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.
|
||||
@@ -157,7 +163,7 @@ form {
|
||||
:not(.@{ant-prefix}-input-group-addon)
|
||||
> .@{ant-prefix}-select
|
||||
.@{ant-prefix}-select-selection__clear {
|
||||
right: 28px;
|
||||
right: (@form-component-height / 2) + @form-feedback-icon-size - 2px;
|
||||
}
|
||||
> .@{ant-prefix}-select .@{ant-prefix}-select-selection-selected-value,
|
||||
:not(.@{ant-prefix}-input-group-addon)
|
||||
@@ -168,17 +174,17 @@ form {
|
||||
|
||||
.@{ant-prefix}-cascader-picker {
|
||||
&-arrow {
|
||||
margin-right: 17px;
|
||||
margin-right: (@form-component-height / 2) + @form-feedback-icon-size - 13px;
|
||||
}
|
||||
&-clear {
|
||||
right: 28px;
|
||||
right: (@form-component-height / 2) + @form-feedback-icon-size - 2px;
|
||||
}
|
||||
}
|
||||
|
||||
// Fix issue: https://github.com/ant-design/ant-design/issues/7854
|
||||
.@{ant-prefix}-input-search:not(.@{ant-prefix}-input-search-enter-button) {
|
||||
.@{ant-prefix}-input-suffix {
|
||||
right: 28px;
|
||||
right: (@form-component-height / 2) + @form-feedback-icon-size - 2px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +193,7 @@ form {
|
||||
.@{ant-prefix}-time-picker {
|
||||
&-icon,
|
||||
&-clear {
|
||||
right: 28px;
|
||||
right: (@form-component-height / 2) + @form-feedback-icon-size - 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
0
components/icon/__tests__/logo.svg
Normal file
0
components/icon/__tests__/logo.svg
Normal file
12
components/icon/__tests__/type.test.tsx
Normal file
12
components/icon/__tests__/type.test.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
/* eslint-disable */
|
||||
import React from 'react';
|
||||
import Icon from '..';
|
||||
import { ReactComponent as logo } from './logo.svg';
|
||||
|
||||
describe('Icon TypeScript test', () => {
|
||||
it('empty test case placeholder to avoid jest error', () => {
|
||||
// empty
|
||||
});
|
||||
});
|
||||
|
||||
<Icon component={logo} />;
|
||||
@@ -67,7 +67,7 @@ export interface IconProps {
|
||||
title?: string;
|
||||
onKeyUp?: React.KeyboardEventHandler<HTMLElement>;
|
||||
onClick?: React.MouseEventHandler<HTMLElement>;
|
||||
component?: React.ComponentType<CustomIconComponentProps>;
|
||||
component?: React.ComponentType<CustomIconComponentProps | React.SVGProps<SVGSVGElement>>;
|
||||
twoToneColor?: string;
|
||||
viewBox?: string;
|
||||
spin?: boolean;
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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=""
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
&-pagination {
|
||||
margin-top: 24px;
|
||||
text-align: right;
|
||||
|
||||
// https://github.com/ant-design/ant-design/issues/20037
|
||||
.@{ant-prefix}-pagination-options {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
&-more {
|
||||
|
||||
@@ -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=""
|
||||
@@ -1862,7 +1861,7 @@ exports[`renders ./components/locale-provider/demo/all.md correctly 1`] = `
|
||||
</i>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -4,7 +4,9 @@ exports[`Modal render correctly 1`] = `
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="ant-modal-root"
|
||||
>
|
||||
<div
|
||||
class="ant-modal-mask fade-appear"
|
||||
/>
|
||||
@@ -100,7 +102,9 @@ exports[`Modal render without footer 1`] = `
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="ant-modal-root"
|
||||
>
|
||||
<div
|
||||
class="ant-modal-mask fade-appear"
|
||||
/>
|
||||
@@ -171,7 +175,9 @@ exports[`Modal render without footer 1`] = `
|
||||
`;
|
||||
|
||||
exports[`Modal support closeIcon 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="ant-modal-root"
|
||||
>
|
||||
<div
|
||||
class="ant-modal-mask fade-appear"
|
||||
/>
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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` | |
|
||||
|
||||
@@ -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=""
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
.reset-component;
|
||||
|
||||
display: inline-block;
|
||||
line-height: unset;
|
||||
}
|
||||
|
||||
// 一般状态
|
||||
|
||||
@@ -92,6 +92,7 @@ export interface OptionProps {
|
||||
disabled?: boolean;
|
||||
value?: string | number;
|
||||
title?: string;
|
||||
label?: React.ReactNode;
|
||||
children?: React.ReactNode;
|
||||
className?: string;
|
||||
style?: React.CSSProperties;
|
||||
|
||||
@@ -469,6 +469,7 @@
|
||||
&-menu {
|
||||
max-height: 250px;
|
||||
margin-bottom: 0;
|
||||
padding: @select-dropdown-edge-child-vertical-padding 0; //Change
|
||||
padding-left: 0; // Override default ul/ol
|
||||
overflow: auto;
|
||||
list-style: none;
|
||||
@@ -499,11 +500,12 @@
|
||||
&-item {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 5px @control-padding-horizontal;
|
||||
padding: @select-dropdown-vertical-padding @control-padding-horizontal;
|
||||
overflow: hidden;
|
||||
color: @text-color;
|
||||
font-weight: normal;
|
||||
line-height: 22px;
|
||||
font-size: @select-dropdown-font-size;
|
||||
line-height: @select-dropdown-line-height;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
cursor: pointer;
|
||||
@@ -514,11 +516,15 @@
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-radius: @border-radius-base @border-radius-base 0 0;
|
||||
& when (@select-dropdown-edge-child-vertical-padding = 0) {
|
||||
border-radius: @border-radius-base @border-radius-base 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 0 @border-radius-base @border-radius-base;
|
||||
& when (@select-dropdown-edge-child-vertical-padding = 0) {
|
||||
border-radius: 0 0 @border-radius-base @border-radius-base;
|
||||
}
|
||||
}
|
||||
|
||||
&-selected {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 的元素。
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -290,6 +290,7 @@
|
||||
|
||||
//Dropdown
|
||||
@dropdown-vertical-padding: 5px;
|
||||
@dropdown-edge-child-vertical-padding: 4px;
|
||||
@dropdown-font-size: @font-size-base;
|
||||
@dropdown-line-height: 22px;
|
||||
|
||||
@@ -337,10 +338,21 @@
|
||||
@select-border-color: @border-color-base;
|
||||
@select-item-selected-font-weight: 600;
|
||||
@select-dropdown-bg: @component-background;
|
||||
@select-dropdown-vertical-padding: @dropdown-vertical-padding;
|
||||
@select-dropdown-edge-child-vertical-padding: @dropdown-edge-child-vertical-padding;
|
||||
@select-dropdown-font-size: @dropdown-font-size;
|
||||
@select-dropdown-line-height: @dropdown-line-height;
|
||||
@select-item-selected-bg: @background-color-light;
|
||||
@select-item-active-bg: @item-active-bg;
|
||||
@select-background: @component-background;
|
||||
|
||||
// Cascader
|
||||
// ----
|
||||
@cascader-dropdown-vertical-padding: @dropdown-vertical-padding;
|
||||
@cascader-dropdown-edge-child-vertical-padding: @dropdown-edge-child-vertical-padding;
|
||||
@cascader-dropdown-font-size: @dropdown-font-size;
|
||||
@cascader-dropdown-line-height: @dropdown-line-height;
|
||||
|
||||
// Anchor
|
||||
// ---
|
||||
@anchor-border-color: @border-color-split;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@ import React from 'react';
|
||||
import { render, mount } from 'enzyme';
|
||||
import Table from '..';
|
||||
import Input from '../../input';
|
||||
import Tooltip from '../../tooltip';
|
||||
import Button from '../../button';
|
||||
import ConfigProvider from '../../config-provider';
|
||||
|
||||
@@ -655,6 +656,40 @@ describe('Table.filter', () => {
|
||||
expect(wrapper.find('.ant-table-filter-icon').render()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('renders custom filter icon as string correctly', () => {
|
||||
const filterIcon = () => 'string';
|
||||
const wrapper = mount(
|
||||
createTable({
|
||||
columns: [
|
||||
{
|
||||
...column,
|
||||
filterIcon,
|
||||
},
|
||||
],
|
||||
}),
|
||||
);
|
||||
expect(wrapper.render()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('renders custom filter icon with right Tooltip title', () => {
|
||||
const filterIcon = () => (
|
||||
<Tooltip title="title" visible>
|
||||
Tooltip
|
||||
</Tooltip>
|
||||
);
|
||||
const wrapper = mount(
|
||||
createTable({
|
||||
columns: [
|
||||
{
|
||||
...column,
|
||||
filterIcon,
|
||||
},
|
||||
],
|
||||
}),
|
||||
);
|
||||
expect(wrapper.render()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
// https://github.com/ant-design/ant-design/issues/13028
|
||||
it('reset dropdown filter correctly', () => {
|
||||
class Demo extends React.Component {
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -30,7 +30,7 @@ exports[`Table.expand click to expand 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -44,6 +44,113 @@ exports[`Table.filter renders custom content correctly 1`] = `
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`Table.filter renders custom filter icon as string correctly 1`] = `
|
||||
<div
|
||||
class="ant-table-wrapper"
|
||||
>
|
||||
<div
|
||||
class="ant-spin-nested-loading"
|
||||
>
|
||||
<div
|
||||
class="ant-spin-container"
|
||||
>
|
||||
<div
|
||||
class="ant-table ant-table-default ant-table-scroll-position-left"
|
||||
>
|
||||
<div
|
||||
class="ant-table-content"
|
||||
>
|
||||
<div
|
||||
class="ant-table-body"
|
||||
>
|
||||
<table
|
||||
class=""
|
||||
>
|
||||
<colgroup>
|
||||
<col />
|
||||
</colgroup>
|
||||
<thead
|
||||
class="ant-table-thead"
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
>
|
||||
<div>
|
||||
<span
|
||||
class="ant-table-column-title"
|
||||
>
|
||||
Name
|
||||
</span>
|
||||
<span
|
||||
class="ant-table-column-sorter"
|
||||
/>
|
||||
</div>
|
||||
</span>
|
||||
<span
|
||||
class="ant-table-filter-icon ant-dropdown-trigger"
|
||||
>
|
||||
string
|
||||
</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody
|
||||
class="ant-table-tbody"
|
||||
>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="0"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Jack
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="1"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Lucy
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="2"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Tom
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="3"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Jerry
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`Table.filter renders custom filter icon correctly 1`] = `
|
||||
<span
|
||||
class="ant-table-filter-icon ant-table-filter-selected ant-dropdown-trigger"
|
||||
@@ -64,6 +171,134 @@ exports[`Table.filter renders custom filter icon correctly 2`] = `
|
||||
</span>
|
||||
`;
|
||||
|
||||
exports[`Table.filter renders custom filter icon with right Tooltip title 1`] = `
|
||||
<div
|
||||
class="ant-table-wrapper"
|
||||
>
|
||||
<div
|
||||
class="ant-spin-nested-loading"
|
||||
>
|
||||
<div
|
||||
class="ant-spin-container"
|
||||
>
|
||||
<div
|
||||
class="ant-table ant-table-default ant-table-scroll-position-left"
|
||||
>
|
||||
<div
|
||||
class="ant-table-content"
|
||||
>
|
||||
<div
|
||||
class="ant-table-body"
|
||||
>
|
||||
<table
|
||||
class=""
|
||||
>
|
||||
<colgroup>
|
||||
<col />
|
||||
</colgroup>
|
||||
<thead
|
||||
class="ant-table-thead"
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
>
|
||||
<div>
|
||||
<span
|
||||
class="ant-table-column-title"
|
||||
>
|
||||
Name
|
||||
</span>
|
||||
<span
|
||||
class="ant-table-column-sorter"
|
||||
/>
|
||||
</div>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tooltip-open ant-table-filter-icon ant-dropdown-trigger"
|
||||
style=""
|
||||
>
|
||||
Tooltip
|
||||
</span>
|
||||
<div>
|
||||
<div
|
||||
class="ant-tooltip ant-tooltip-placement-top zoom-big-fast-appear"
|
||||
style="left: -999px; top: -1003px; transform-origin: 50% 4px;"
|
||||
>
|
||||
<div
|
||||
class="ant-tooltip-content"
|
||||
>
|
||||
<div
|
||||
class="ant-tooltip-arrow"
|
||||
/>
|
||||
<div
|
||||
class="ant-tooltip-inner"
|
||||
role="tooltip"
|
||||
>
|
||||
title
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody
|
||||
class="ant-table-tbody"
|
||||
>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="0"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Jack
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="1"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Lucy
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="2"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Tom
|
||||
</td>
|
||||
</tr>
|
||||
<tr
|
||||
class="ant-table-row ant-table-row-level-0"
|
||||
data-row-key="3"
|
||||
>
|
||||
<td
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
>
|
||||
Jerry
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`Table.filter renders filter correctly 1`] = `
|
||||
<div
|
||||
class="ant-table-wrapper"
|
||||
@@ -94,7 +329,7 @@ exports[`Table.filter renders filter correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -407,7 +642,7 @@ exports[`Table.filter should support getPopupContainer 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -626,7 +861,7 @@ exports[`Table.filter should support getPopupContainer from ConfigProvider 1`] =
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -30,7 +30,7 @@ exports[`Table.pagination Accepts pagination as true 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -204,7 +204,7 @@ exports[`Table.pagination renders pagination correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -72,7 +72,7 @@ exports[`Table.rowSelection fix selection column on the left 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -245,7 +245,7 @@ exports[`Table.rowSelection fix selection column on the left 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-selection-column"
|
||||
class="ant-table-selection-column ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -545,7 +545,7 @@ exports[`Table.rowSelection fix selection column on the left when any other colu
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-fixed-columns-in-body"
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -755,7 +755,7 @@ exports[`Table.rowSelection fix selection column on the left when any other colu
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -1048,7 +1048,7 @@ exports[`Table.rowSelection use column as selection column when key is \`selecti
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-selection-column"
|
||||
class="ant-table-selection-column ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -6,7 +6,7 @@ exports[`Table.sorter renders sorter icon correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-sorters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-sorters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -103,7 +103,7 @@ exports[`Table.sorter should support defaultOrder in Column 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-sorters ant-table-column-sort"
|
||||
class="ant-table-column-has-actions ant-table-column-has-sorters ant-table-column-sort ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -51,7 +51,7 @@ exports[`Table renders JSX correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
rowspan="2"
|
||||
>
|
||||
<span
|
||||
|
||||
@@ -139,7 +139,7 @@ exports[`renders ./components/table/demo/ajax.md correctly 1`] = `
|
||||
</i>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -325,7 +325,7 @@ exports[`renders ./components/table/demo/basic.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -659,7 +659,7 @@ exports[`renders ./components/table/demo/bordered.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -923,7 +923,7 @@ exports[`renders ./components/table/demo/colspan-rowspan.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -1278,7 +1278,7 @@ exports[`renders ./components/table/demo/custom-filter-panel.md correctly 1`] =
|
||||
</i>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -1551,7 +1551,7 @@ exports[`renders ./components/table/demo/drag-sorting.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -2489,7 +2489,7 @@ exports[`renders ./components/table/demo/dynamic-settings.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -3668,7 +3668,7 @@ exports[`renders ./components/table/demo/edit-cell.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -3930,7 +3930,7 @@ exports[`renders ./components/table/demo/edit-row.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -4517,7 +4517,7 @@ exports[`renders ./components/table/demo/ellipsis.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-row-cell-ellipsis"
|
||||
class="ant-table-row-cell-ellipsis ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -4839,7 +4839,7 @@ exports[`renders ./components/table/demo/expand.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -5165,7 +5165,7 @@ exports[`renders ./components/table/demo/expand-children.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -5600,7 +5600,7 @@ exports[`renders ./components/table/demo/fixed-columns.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word"
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -5794,7 +5794,7 @@ exports[`renders ./components/table/demo/fixed-columns.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -5874,7 +5874,7 @@ exports[`renders ./components/table/demo/fixed-columns.md correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -6248,7 +6248,7 @@ exports[`renders ./components/table/demo/fixed-columns-header.md correctly 1`] =
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word"
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -6978,7 +6978,7 @@ exports[`renders ./components/table/demo/fixed-columns-header.md correctly 1`] =
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -7195,7 +7195,7 @@ exports[`renders ./components/table/demo/fixed-columns-header.md correctly 1`] =
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -7598,7 +7598,7 @@ exports[`renders ./components/table/demo/fixed-header.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -8865,7 +8865,7 @@ exports[`renders ./components/table/demo/grouping-columns.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word"
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
rowspan="4"
|
||||
>
|
||||
<span
|
||||
@@ -9598,7 +9598,7 @@ exports[`renders ./components/table/demo/grouping-columns.md correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-break-word"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
rowspan="4"
|
||||
>
|
||||
<span
|
||||
@@ -9784,7 +9784,7 @@ exports[`renders ./components/table/demo/grouping-columns.md correctly 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
rowspan="4"
|
||||
>
|
||||
<span
|
||||
@@ -10255,7 +10255,7 @@ exports[`renders ./components/table/demo/head.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -10617,7 +10617,7 @@ exports[`renders ./components/table/demo/jsx.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
rowspan="2"
|
||||
>
|
||||
<span
|
||||
@@ -11078,7 +11078,7 @@ exports[`renders ./components/table/demo/nested-table.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -11548,7 +11548,7 @@ exports[`renders ./components/table/demo/reset-filter.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters ant-table-row-cell-ellipsis"
|
||||
class="ant-table-column-has-actions ant-table-column-has-filters ant-table-column-has-sorters ant-table-row-cell-ellipsis ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -11938,7 +11938,7 @@ exports[`renders ./components/table/demo/resizable-column.md correctly 1`] = `
|
||||
/>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -12245,7 +12245,7 @@ exports[`renders ./components/table/demo/row-selection.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -12650,7 +12650,7 @@ exports[`renders ./components/table/demo/row-selection-and-operation.md correctl
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -13332,7 +13332,7 @@ exports[`renders ./components/table/demo/row-selection-custom.md correctly 1`] =
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -13955,7 +13955,7 @@ exports[`renders ./components/table/demo/size.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -14187,7 +14187,7 @@ exports[`renders ./components/table/demo/size.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -163,7 +163,7 @@ exports[`Table renders empty table 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -406,7 +406,7 @@ exports[`Table renders empty table with custom emptyText 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -671,7 +671,7 @@ exports[`Table renders empty table with fixed columns 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word"
|
||||
class="ant-table-fixed-columns-in-body ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -789,7 +789,7 @@ exports[`Table renders empty table with fixed columns 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -838,7 +838,7 @@ exports[`Table renders empty table with fixed columns 1`] = `
|
||||
>
|
||||
<tr>
|
||||
<th
|
||||
class="ant-table-row-cell-break-word"
|
||||
class="ant-table-row-cell-break-word ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -1056,7 +1056,7 @@ exports[`Table renders empty table without emptyText when loading 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -90,24 +90,25 @@ class App extends React.Component {
|
||||
setTimeout(() => this.searchInput.select());
|
||||
}
|
||||
},
|
||||
render: text => (
|
||||
(this.state.searchedColumn === dataIndex) ?
|
||||
<Highlighter
|
||||
highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}
|
||||
searchWords={[this.state.searchText]}
|
||||
autoEscape
|
||||
textToHighlight={text.toString()}
|
||||
/>
|
||||
: text
|
||||
),
|
||||
render: text =>
|
||||
this.state.searchedColumn === dataIndex ? (
|
||||
<Highlighter
|
||||
highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}
|
||||
searchWords={[this.state.searchText]}
|
||||
autoEscape
|
||||
textToHighlight={text.toString()}
|
||||
/>
|
||||
) : (
|
||||
text
|
||||
),
|
||||
});
|
||||
|
||||
handleSearch = (selectedKeys, confirm, dataIndex) => {
|
||||
confirm();
|
||||
this.setState({
|
||||
this.setState({
|
||||
searchText: selectedKeys[0],
|
||||
searchedColumn: dataIndex,
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
handleReset = clearFilters => {
|
||||
|
||||
@@ -19,7 +19,7 @@ title:
|
||||
|
||||
Use `filters` to generate filter menu in columns, `onFilter` to determine filtered result, and `filterMultiple` to indicate whether it's multiple or single selection.
|
||||
|
||||
Uses `defaultFilterValues` to make a column filtered by default.
|
||||
Uses `defaultFilteredValue` to make a column filtered by default.
|
||||
|
||||
Use `sorter` to make a column sortable. `sorter` can be a function of the type `function(a, b) { ... }` for sorting data locally.
|
||||
|
||||
@@ -60,7 +60,6 @@ const columns = [
|
||||
],
|
||||
},
|
||||
],
|
||||
defaultFilterValues: ['Jim'],
|
||||
// specify the condition of filtering result
|
||||
// here is that finding the name started with `value`
|
||||
onFilter: (value, record) => record.name.indexOf(value) === 0,
|
||||
|
||||
@@ -200,7 +200,7 @@ class FilterMenu<T> extends React.Component<FilterMenuProps<T>, FilterMenuState<
|
||||
renderFilterIcon = () => {
|
||||
const { column, locale, prefixCls, selectedKeys } = this.props;
|
||||
const filtered = selectedKeys && selectedKeys.length > 0;
|
||||
let filterIcon = column.filterIcon as any;
|
||||
let filterIcon = column.filterIcon;
|
||||
if (typeof filterIcon === 'function') {
|
||||
filterIcon = filterIcon(filtered);
|
||||
}
|
||||
@@ -210,21 +210,27 @@ class FilterMenu<T> extends React.Component<FilterMenuProps<T>, FilterMenuState<
|
||||
[`${prefixCls}-open`]: this.getDropdownVisible(),
|
||||
});
|
||||
|
||||
return filterIcon ? (
|
||||
React.cloneElement(filterIcon as any, {
|
||||
title: locale.filterTitle,
|
||||
if (!filterIcon) {
|
||||
return (
|
||||
<Icon
|
||||
title={locale.filterTitle}
|
||||
type="filter"
|
||||
theme="filled"
|
||||
className={dropdownIconClass}
|
||||
onClick={stopPropagation}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (React.isValidElement(filterIcon)) {
|
||||
return React.cloneElement(filterIcon, {
|
||||
title: filterIcon.props.title || locale.filterTitle,
|
||||
className: classNames(`${prefixCls}-icon`, dropdownIconClass, filterIcon.props.className),
|
||||
onClick: stopPropagation,
|
||||
})
|
||||
) : (
|
||||
<Icon
|
||||
title={locale.filterTitle}
|
||||
type="filter"
|
||||
theme="filled"
|
||||
className={dropdownIconClass}
|
||||
onClick={stopPropagation}
|
||||
/>
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
return <span className={classNames(`${prefixCls}-icon`, dropdownIconClass)}>{filterIcon}</span>;
|
||||
};
|
||||
|
||||
renderMenuItem(item: ColumnFilterItem) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -660,7 +663,12 @@
|
||||
// https://stackoverflow.com/a/54101063
|
||||
// https://github.com/react-component/table/pull/333
|
||||
scrollbar-color: transparent transparent;
|
||||
min-width: unset;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
// set min width to window chrome scrollbar
|
||||
// https://github.com/ant-design/ant-design/issues/19952#issuecomment-559367149
|
||||
min-width: inherit;
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,6 @@
|
||||
.@{table-prefix-cls}-footer {
|
||||
border: 0;
|
||||
border-top: @border-width-base @border-style-base @border-color-split;
|
||||
border-right: @border-width-base @border-style-base @border-color-split;
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
@@ -147,7 +146,7 @@
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.@{table-prefix-cls}-thead > tr:only-child > th:last-child,
|
||||
.@{table-prefix-cls}-thead > tr > th.@{table-prefix-cls}-row-cell-last,
|
||||
.@{table-prefix-cls}-tbody > tr > td:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
|
||||
@@ -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 />);
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -100,6 +100,7 @@ class Tag extends React.Component<TagProps, TagState> {
|
||||
}
|
||||
|
||||
handleIconClick = (e: React.MouseEvent<HTMLElement>) => {
|
||||
e.stopPropagation();
|
||||
this.setVisible(false, e);
|
||||
};
|
||||
|
||||
|
||||
@@ -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=""
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1484,7 +1484,7 @@ exports[`renders ./components/transfer/demo/table-transfer.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
@@ -2197,7 +2197,7 @@ exports[`renders ./components/transfer/demo/table-transfer.md correctly 1`] = `
|
||||
</span>
|
||||
</th>
|
||||
<th
|
||||
class=""
|
||||
class="ant-table-row-cell-last"
|
||||
>
|
||||
<span
|
||||
class="ant-table-header-column"
|
||||
|
||||
@@ -28,7 +28,7 @@ type TransferRender = (item: TransferItem) => RenderResult;
|
||||
|
||||
export interface TransferItem {
|
||||
key: string;
|
||||
title: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
disabled?: boolean;
|
||||
[name: string]: any;
|
||||
|
||||
@@ -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 | |
|
||||
|
||||
@@ -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 | |
|
||||
|
||||
@@ -195,28 +195,23 @@ export default class Tree extends React.Component<TreeProps, any> {
|
||||
return <Icon type="loading" className={`${prefixCls}-switcher-loading-icon`} />;
|
||||
}
|
||||
if (isLeaf) {
|
||||
if (showLine) {
|
||||
return <Icon type="file" className={`${prefixCls}-switcher-line-icon`} />;
|
||||
}
|
||||
return null;
|
||||
return showLine ? <Icon type="file" className={`${prefixCls}-switcher-line-icon`} /> : null;
|
||||
}
|
||||
const switcherCls = `${prefixCls}-switcher-icon`;
|
||||
if (switcherIcon) {
|
||||
const switcherOriginCls = switcherIcon.props.className || '';
|
||||
return React.cloneElement(switcherIcon, {
|
||||
className: classNames(switcherOriginCls, switcherCls),
|
||||
className: classNames(switcherIcon.props.className || '', switcherCls),
|
||||
});
|
||||
}
|
||||
if (showLine) {
|
||||
return (
|
||||
<Icon
|
||||
type={expanded ? 'minus-square' : 'plus-square'}
|
||||
className={`${prefixCls}-switcher-line-icon`}
|
||||
theme="outlined"
|
||||
/>
|
||||
);
|
||||
}
|
||||
return <Icon type="caret-down" className={switcherCls} theme="filled" />;
|
||||
return showLine ? (
|
||||
<Icon
|
||||
type={expanded ? 'minus-square' : 'plus-square'}
|
||||
className={`${prefixCls}-switcher-line-icon`}
|
||||
theme="outlined"
|
||||
/>
|
||||
) : (
|
||||
<Icon type="caret-down" className={switcherCls} theme="filled" />
|
||||
);
|
||||
};
|
||||
|
||||
setTreeRef = (node: any) => {
|
||||
|
||||
@@ -1498,302 +1498,462 @@ exports[`renders ./components/tree/demo/dynamic.md correctly 1`] = `
|
||||
`;
|
||||
|
||||
exports[`renders ./components/tree/demo/line.md correctly 1`] = `
|
||||
<ul
|
||||
class="ant-tree ant-tree-icon-hide ant-tree-show-line"
|
||||
role="tree"
|
||||
unselectable="on"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
<div>
|
||||
<div
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1"
|
||||
showLine:
|
||||
<button
|
||||
aria-checked="true"
|
||||
checked=""
|
||||
class="ant-switch ant-switch-checked"
|
||||
role="switch"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
parent 1
|
||||
</span>
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
class="ant-switch-inner"
|
||||
/>
|
||||
</button>
|
||||
<br />
|
||||
<br />
|
||||
showIcon:
|
||||
<button
|
||||
aria-checked="false"
|
||||
class="ant-switch"
|
||||
role="switch"
|
||||
type="button"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
<span
|
||||
class="ant-switch-inner"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
<ul
|
||||
class="ant-tree ant-tree-icon-hide ant-tree-show-line"
|
||||
role="tree"
|
||||
unselectable="on"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
class="ant-tree-title"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
parent 1
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1-0"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
parent 1-0
|
||||
</span>
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_close"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: plus-square"
|
||||
class="anticon anticon-plus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="plus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close"
|
||||
title="parent 1-1"
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
>
|
||||
parent 1-1
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_close"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: plus-square"
|
||||
class="anticon anticon-plus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="plus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<path
|
||||
d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close"
|
||||
title="parent 1-2"
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1-0"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
parent 1-0
|
||||
</span>
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
>
|
||||
parent 1-2
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1-1"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
parent 1-1
|
||||
</span>
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-open"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_open"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: minus-square"
|
||||
class="anticon anticon-minus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="minus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-open"
|
||||
title="parent 1-2"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
parent 1-2
|
||||
</span>
|
||||
</span>
|
||||
<ul
|
||||
class="ant-tree-child-tree ant-tree-child-tree-open"
|
||||
data-expanded="true"
|
||||
role="group"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: file"
|
||||
class="anticon anticon-file ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="file"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
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>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher-noop"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: form"
|
||||
class="anticon anticon-form"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="form"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M904 512h-56c-4.4 0-8 3.6-8 8v320H184V184h320c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V520c0-4.4-3.6-8-8-8z"
|
||||
/>
|
||||
<path
|
||||
d="M355.9 534.9L354 653.8c-.1 8.9 7.1 16.2 16 16.2h.4l118-2.9c2-.1 4-.9 5.4-2.3l415.9-415c3.1-3.1 3.1-8.2 0-11.3L785.4 114.3c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-415.8 415a8.3 8.3 0 0 0-2.3 5.6zm63.5 23.6L779.7 199l45.2 45.1-360.5 359.7-45.7 1.1.7-46.4z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-normal"
|
||||
title="leaf"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
leaf
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`renders ./components/tree/demo/search.md correctly 1`] = `
|
||||
|
||||
102
components/tree/__tests__/__snapshots__/index.test.js.snap
Normal file
102
components/tree/__tests__/__snapshots__/index.test.js.snap
Normal file
@@ -0,0 +1,102 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Tree icon and switcherIcon of Tree with showLine should render correctly 1`] = `
|
||||
<ul
|
||||
class="ant-tree ant-tree-show-line"
|
||||
role="tree"
|
||||
unselectable="on"
|
||||
>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_close"
|
||||
>
|
||||
switcherIcon
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close"
|
||||
title="---"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-iconEle ant-tree-icon__customize"
|
||||
>
|
||||
icon
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
---
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_close"
|
||||
>
|
||||
switcherIcon
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close"
|
||||
title="---"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-iconEle ant-tree-icon__close"
|
||||
/>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
---
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="ant-tree-treenode-switcher-close"
|
||||
role="treeitem"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-switcher ant-tree-switcher_close"
|
||||
>
|
||||
<i
|
||||
aria-label="icon: plus-square"
|
||||
class="anticon anticon-plus-square ant-tree-switcher-line-icon"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class=""
|
||||
data-icon="plus-square"
|
||||
fill="currentColor"
|
||||
focusable="false"
|
||||
height="1em"
|
||||
viewBox="64 64 896 896"
|
||||
width="1em"
|
||||
>
|
||||
<path
|
||||
d="M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"
|
||||
/>
|
||||
<path
|
||||
d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"
|
||||
/>
|
||||
</svg>
|
||||
</i>
|
||||
</span>
|
||||
<span
|
||||
class="ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close"
|
||||
title="---"
|
||||
>
|
||||
<span
|
||||
class="ant-tree-iconEle ant-tree-icon__close"
|
||||
/>
|
||||
<span
|
||||
class="ant-tree-title"
|
||||
>
|
||||
---
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
`;
|
||||
45
components/tree/__tests__/index.test.js
Normal file
45
components/tree/__tests__/index.test.js
Normal file
@@ -0,0 +1,45 @@
|
||||
import React from 'react';
|
||||
import { mount } from 'enzyme';
|
||||
import Tree from '../index';
|
||||
|
||||
const { TreeNode } = Tree;
|
||||
|
||||
describe('Tree', () => {
|
||||
it('icon and switcherIcon of Tree with showLine should render correctly', () => {
|
||||
const wrapper = mount(
|
||||
<Tree showLine showIcon>
|
||||
<TreeNode icon="icon" switcherIcon="switcherIcon" key="0-0">
|
||||
<TreeNode icon="icon" switcherIcon="switcherIcon" key="0-0-0" />
|
||||
<TreeNode switcherIcon="switcherIcon" key="0-0-1" />
|
||||
<TreeNode icon="icon" key="0-0-2" />
|
||||
<TreeNode key="0-0-3" />
|
||||
</TreeNode>
|
||||
<TreeNode switcherIcon="switcherIcon" key="0-1">
|
||||
<TreeNode icon="icon" switcherIcon="switcherIcon" key="0-0-0" />
|
||||
<TreeNode switcherIcon="switcherIcon" key="0-0-1" />
|
||||
<TreeNode icon="icon" key="0-0-2" />
|
||||
<TreeNode key="0-0-3" />
|
||||
</TreeNode>
|
||||
<TreeNode key="0-2">
|
||||
<TreeNode icon="icon" switcherIcon="switcherIcon" key="0-0-0" />
|
||||
<TreeNode switcherIcon="switcherIcon" key="0-0-1" />
|
||||
<TreeNode icon="icon" key="0-0-2" />
|
||||
<TreeNode key="0-0-3" />
|
||||
</TreeNode>
|
||||
</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);
|
||||
});
|
||||
});
|
||||
@@ -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 {
|
||||
|
||||
@@ -2,45 +2,72 @@
|
||||
order: 5
|
||||
title:
|
||||
zh-CN: 连接线
|
||||
en-US: Tree With Line
|
||||
en-US: Tree with line
|
||||
---
|
||||
|
||||
## zh-CN
|
||||
|
||||
带连接线的树。
|
||||
节点之间带连接线的树,常用于文件目录结构展示。使用 `showLine` 开启,可以用 `switcherIcon` 修改默认图标。
|
||||
|
||||
## en-US
|
||||
|
||||
Tree With Line
|
||||
Tree with connected line between nodes, turn on by `showLine`, customize the preseted icon by `switcherIcon`.
|
||||
|
||||
```jsx
|
||||
import { Tree } from 'antd';
|
||||
import { Tree, Icon, Switch } from 'antd';
|
||||
|
||||
const { TreeNode } = Tree;
|
||||
|
||||
class Demo extends React.Component {
|
||||
onSelect = (selectedKeys, info) => {
|
||||
console.log('selected', selectedKeys, info);
|
||||
};
|
||||
state = {
|
||||
showLine: true,
|
||||
showIcon: false,
|
||||
}
|
||||
|
||||
onShowLineChange = showLine => {
|
||||
this.setState({ showLine });
|
||||
}
|
||||
|
||||
onShowIconChange = showIcon => {
|
||||
this.setState({ showIcon });
|
||||
}
|
||||
|
||||
render() {
|
||||
const { showIcon, showLine } = this.state;
|
||||
return (
|
||||
<Tree showLine defaultExpandedKeys={['0-0-0']} onSelect={this.onSelect}>
|
||||
<TreeNode title="parent 1" key="0-0">
|
||||
<TreeNode title="parent 1-0" key="0-0-0">
|
||||
<TreeNode title="leaf" key="0-0-0-0" />
|
||||
<TreeNode title="leaf" key="0-0-0-1" />
|
||||
<TreeNode title="leaf" key="0-0-0-2" />
|
||||
<div>
|
||||
<div style={{ marginBottom: 16 }}>
|
||||
showLine: <Switch checked={showLine} onChange={this.onShowLineChange} />
|
||||
<br />
|
||||
<br />
|
||||
showIcon: <Switch checked={showIcon} onChange={this.onShowIconChange} />
|
||||
</div>
|
||||
<Tree
|
||||
showLine={showLine}
|
||||
showIcon={showIcon}
|
||||
defaultExpandedKeys={['0-0-0', '0-0-1', '0-0-2']}
|
||||
>
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="parent 1" key="0-0">
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="parent 1-0" key="0-0-0">
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="leaf" key="0-0-0-0" />
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="leaf" key="0-0-0-1" />
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="leaf" key="0-0-0-2" />
|
||||
</TreeNode>
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="parent 1-1" key="0-0-1">
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="leaf" key="0-0-1-0" />
|
||||
</TreeNode>
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="parent 1-2" key="0-0-2">
|
||||
<TreeNode icon={<Icon type="carry-out" />} title="leaf" key="0-0-2-0" />
|
||||
<TreeNode
|
||||
switcherIcon={<Icon type="form" />}
|
||||
icon={<Icon type="carry-out" />}
|
||||
title="leaf"
|
||||
key="0-0-2-1"
|
||||
/>
|
||||
</TreeNode>
|
||||
</TreeNode>
|
||||
<TreeNode title="parent 1-1" key="0-0-1">
|
||||
<TreeNode title="leaf" key="0-0-1-0" />
|
||||
</TreeNode>
|
||||
<TreeNode title="parent 1-2" key="0-0-2">
|
||||
<TreeNode title="leaf" key="0-0-2-0" />
|
||||
<TreeNode title="leaf" key="0-0-2-1" />
|
||||
</TreeNode>
|
||||
</TreeNode>
|
||||
</Tree>
|
||||
</Tree>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ Almost anything can be represented in a tree structure. Examples include directo
|
||||
| showIcon | Shows the icon before a TreeNode's title. There is no default style; you must set a custom style for it if set to `true` | boolean | false | |
|
||||
| switcherIcon | customize collapse/expand icon of tree node | React.ReactElement | - | 3.12.0 |
|
||||
| showLine | Shows a connecting line | boolean | false | |
|
||||
| onCheck | Callback function for when the onCheck event occurs | function(checkedKeys, e:{checked: bool, checkedNodes, node, event}) | - | |
|
||||
| onCheck | Callback function for when the onCheck event occurs | function(checkedKeys, e:{checked: bool, checkedNodes, node, event, halfCheckedKeys}) | - | |
|
||||
| onDragEnd | Callback function for when the onDragEnd event occurs | function({event, node}) | - | |
|
||||
| onDragEnter | Callback function for when the onDragEnter event occurs | function({event, node, expandedKeys}) | - | |
|
||||
| onDragLeave | Callback function for when the onDragLeave event occurs | function({event, node}) | - | |
|
||||
|
||||
@@ -39,7 +39,7 @@ subtitle: 树形控件
|
||||
| showIcon | 是否展示 TreeNode title 前的图标,没有默认样式,如设置为 true,需要自行定义图标相关样式 | boolean | false | |
|
||||
| switcherIcon | 自定义树节点的展开/折叠图标 | React.ReactElement | - | 3.12.0 |
|
||||
| showLine | 是否展示连接线 | boolean | false | |
|
||||
| onCheck | 点击复选框触发 | function(checkedKeys, e:{checked: bool, checkedNodes, node, event}) | - | |
|
||||
| onCheck | 点击复选框触发 | function(checkedKeys, e:{checked: bool, checkedNodes, node, event, halfCheckedKeys}) | - | |
|
||||
| onDragEnd | dragend 触发时调用 | function({event, node}) | - | |
|
||||
| onDragEnter | dragenter 触发时调用 | function({event, node, expandedKeys}) | - | |
|
||||
| onDragLeave | dragleave 触发时调用 | function({event, node}) | - | |
|
||||
|
||||
@@ -149,6 +149,10 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&.@{tree-prefix-cls}-iconEle:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.@{tree-prefix-cls}-switcher {
|
||||
position: relative;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user