{"_id":"@rax-ui/filter","_rev":"34-9a6df831213030a57f6f585714573786","name":"@rax-ui/filter","dist-tags":{"latest":"1.0.0-beta.62","next":"1.0.0-beta.47"},"versions":{"1.0.0-beta.0":{"name":"@rax-ui/filter","version":"1.0.0-beta.0","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.0","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-unmount-component-at-node":"^1.0.0","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"1a6e15f3c41d43cc20c395815d68f969fa4074d1","_id":"@rax-ui/filter@1.0.0-beta.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-C6HKp4Ht1gg11wiNTeYIeASZ5ChXB9eBvmIzeM0TaMgflu5k/gLjuKCHVZvdXmWApemBKmrdFCx02rUwYRVQxw==","shasum":"37ffbd1a4edf8399638acd3f18308944bd1b848f","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.0.tgz","fileCount":35,"unpackedSize":123676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVo89CRA9TVsSAnZWagAAhQIP/itgWgaok2mWrMFFjXYi\nSRPpT9+fbNl8ii7fYMZooNcgNDxY2M1N9nRCm6N9YuFbWHnODJn8SW0Glj4V\nsssM9JCMff9D2aD3JTlKdFf6s4CroqbZbKRAZVVPqQrQFskhuFTNaEffjxej\nhWyz1Zfyt4A1kBSSSgGCND+wxin/gpK7lESP+4nSS7UnhT3olBi46lrPdCsN\nBwQUBvi+EzQs9v27ILH7yfsv2cvjzTowf1UnZs693px/5sb129crZxJNNHLX\nihcmBhr0EBdKlTgzCx2uvU3cfW1eKmiIzEZ+z9geKMQ0mrvzvJX6rasBU1iX\nwY9R5m/tbGF9VNUma799nSzYMj5KbZihas5dN8Uex+RdpiZT52KV1ikfvPwR\nIoD8DAu5DVTs0NtaA9F+5/3CoqoZ05//d8HTgAFDdOgva/6SW93BUxK+8H80\nI7oUEarJ5Fz1y6WB22wHonclNrCv/BdJkxF0IyhDtKatUK/AVJf4HGDacleD\nFrLioxeporVu0XQRBPJyOgELDVa+LhDfFfllzu2wX+eYEPzzW+1TjHGah//n\nvy31CVy4XOF14IjBgZ0tlbBg/dW49rYwXh7qaZ0K7+GqzzlxPmES73BZWOWm\n9iTa5xRhXAwGrvD/yrx38AK7NFodVrlDuzbVIFvszeUQMM15g/pzVlNNnkuk\nMGLm\r\n=NPqw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKZMfMK9xcpFFh1TCoUD86aoPw7sFz/FOOUjVCcXbCSAiA6sMcKnSb2WZI5oYUJJywaG8f2iXIthMT6100C7HH+HA=="}]},"maintainers":[{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.0_1565953852515_0.17321558890591215"},"_hasShrinkwrap":false},"1.0.0-beta.1":{"name":"@rax-ui/filter","version":"1.0.0-beta.1","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.1","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-unmount-component-at-node":"^1.0.0","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"c3e5130c088a5a78953d890921bc61a11420ecae","_id":"@rax-ui/filter@1.0.0-beta.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-KzZuoepdX8Wcai9OGhh9UDv03XAKpNpBVPzZKLbMbGZwH/bXabPm+Nd+DaQ4l5WewIvTqTYResLS8HsmjbHDbA==","shasum":"d1a93dea232f7533855c2bb1da1ceab81d5a9658","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.1.tgz","fileCount":35,"unpackedSize":120457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXL0/CRA9TVsSAnZWagAA1jsQAJy/hVU6yqDMJ09yuxei\nJVFJlcfyeDMfoLTyI0ZbRO7EQIeDf16LQsjAlOYP7LG92eA69yvzRWvVFiXs\nRM2op2tHXaYu54fjL1xPEfFDu1K9BZ9bPwtpOEFEB1xer1o7umIeJmvlNs9M\nw6scGBkMP8EFnpraXgX142cqL+9Q66wUryS3ESnRyuNE2KnELjt4fmhkxtaE\ndjTTEXTGpc2702DJK+HpFZUtY04O4o+ejRsVNxvnUnkkGuAmmF4f1rF4OrbV\nTQosP8iwFS69bcUoa/p3MEqgWkLh0Zi68dsC9Eofnlhg/Dvr8uhJ0A3YzTZc\nyiO+MDdTr5fr6Qmh5Qii7p8lPQnPqEJl3W8uHdsx6kqCbLXji9bkw1nPviaX\nvGj8b6khYDs5SJoNyVySnNbSrQPzweU6cRfw/ToxdmNmaIbokWT9XYVVrEuf\nmZ8h6CtJEL9TYCrA4uHEsDvnidV3QyvNdXcqSFRTyZuL13vpGTnvqMU6Ferz\nKnM65il6/rEShWISmRTqy5ywbE4DmWHCFI6leJpkiNSaHwfVmUIOlhiHR0tR\nws5UW9Zan2SPdorKhw6x1mr3OZ4jgse/Z243BDD9A2jw7X3IB5FLz6MSSUuD\n5aRyQJA1+vz7YF4PP1du1NFlci63Mi/GdoIUB2BfrUaOhQsr90R7NOAxluvT\noKbp\r\n=Jpy8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID20TpOt1j0/CHD4k6dQNd49Z8YFdCOO/YvMINRhytdlAiBT7Sg/bGjrexlpdDBT4XJgSCluWlbaoZNpIHXlDxrsSw=="}]},"maintainers":[{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.1_1566358847062_0.08310094073767482"},"_hasShrinkwrap":false},"1.0.0-beta.2":{"name":"@rax-ui/filter","version":"1.0.0-beta.2","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.2","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-unmount-component-at-node":"^1.0.0","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"e9d3ecac597c99aed093b0bd57e56b8cf1fd1d99","_id":"@rax-ui/filter@1.0.0-beta.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-VkxRaoNPajlDVmTUheR5297N8Yhb9xz7T/VDn2vZVTFSNPd9jsFQ7cuq+lsXYeWk+SAmb/j1FYeHT4utxK/Ujw==","shasum":"336b49e86da0fe824ac92678a138b7d2e9708274","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.2.tgz","fileCount":35,"unpackedSize":120457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXTeLCRA9TVsSAnZWagAAvFIP/3fQ6hbJ9d+7AbQRzjAE\noks1FL0sBqE2pqmpGSFd8aX1MVkqzLEm9nBqs18mhkJDPXJ5+kUYr1eaTeAK\nGxIEcJylqslJZmy+bdD4kafD+wqvUSwlU90PjBokck1k64QQ8ZTQXE13nH5Y\n36IdzDM9OEIz3hOLUQcjCn8HNtl40LrlbjSacUny3xDMYwLs9AEOD2FBHp4J\ngPNSvDMd0lrUuB2BBAtCbpZm8YDUwOLYPXoSEKNUMGpYWqYKxLx6mIGb8k8v\n0BmESQzIuTcDporst97BKq0/gUSzpROSjVzGZohIhQVYf3aKzYjWCMssJlws\nq5NzbIf5OuDj7N3Mlm8hufO2nS8jU4MMxzg7NkzZnbNCuKtq2imjsJIZtE/f\n2a72ngyLdyhHYkBQ6M4qjpf41NZk5YZ99BFn3261BkPfCveL1YVlQk7uHZ+F\nJzOfdfB3lsFatpftjJgL11aK+ZyrAGOC+JyZV0wfFsPDBFnjNsH5Ymca6qqj\nuO5mV1gsvGK5X8Pzfl/kiiSBt9VYKY9ZJClRIY1jB7loKF4y/t79tttkNH/y\nFIJTDA8lngHGEPOZstVoDRxMlcICjzsoZApYIybEw4cPxmm9xSOWwxnsy/rp\nhAaHddecj0Y3Sjohaan+tuSTcQf67/XOm8iUp8GYeNxwZu7bhxvx0/IKug1x\nWLRM\r\n=lMrp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7kLv05mMsFlXqlB2I/Vs8a6efbtXF4TKGuXx3krUV9AIhANG4DDaNjn0rp+cTFUJj0QNW/oh8j4jL+iBblqPKIPvr"}]},"maintainers":[{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.2_1566390155183_0.9500931572899975"},"_hasShrinkwrap":false},"1.0.0-beta.3":{"name":"@rax-ui/filter","version":"1.0.0-beta.3","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.3","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"dbf7bbbd03b1396b559dd5e7067a14ff531eaa85","_id":"@rax-ui/filter@1.0.0-beta.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-CPTp817JJM0G4zcczTJgKO2yQHIvdbSb9MR0LZTGcBtZy6sG/DyP/m6+rG6wdJd8WGj+nYezFKilBQ6DieAL1w==","shasum":"02f930850adea93eae6352aca15bbd6698f203d5","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.3.tgz","fileCount":35,"unpackedSize":115556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaQqqCRA9TVsSAnZWagAAl3kQAIOWAMeAV9NeIwrtJahY\nAILa91encsc+EqxR9UGYJcetOrlg2Y3ZHbx84gp1qV9Xibi9rlEPvzm1LcIj\nRXmaaAor/XMybpmxToKaA6D9ozFmxC0J40EilWi0hu3aEShuRoHfRH6kaJyC\noa86w5ZkhAnZv8Ssmu1JpCH70Af57FTKcSqjQjAgTwjvV18jkk8305bRKUWU\nCRmh5l292M+08RIHMlcPPdNlTmKDOlE53IHu2VwTRorimdHU1obl/6VomH2H\nJk16AeSlfzq17RjfWcOEdfda2KrwOr5p2KUkbDQinokl2ZA94RiJdzBJ06ZJ\nmun0o8GgbSAj6dvWI/Wl7Co12v+pVEdEleDwYELwoSQ7FqjxzejlHXqwQvaS\nBo5wae1YXFofYjo19AeqGNZPmyjIZYvGSGGGCjwiwbQCQ01yxxzZDnsCUJPk\n9DnBMSiXxxlSnepj5p7WfV/CD3mSZVbOWafyYA/pmteaY44ogn8hWseb7sPt\nKS1J6j+SeFuTxJuWgySEqMG35ixtbCEcvdbeMwQtS85FY0ZV+LHsgka9wlit\nDMnAbX6SEKAvVHdOPvHxVBewlqfFPcWrMV7CTsYeXk47+p3ksthakHMEkcT1\nbu7yH6yz28NlKEhsj+EDDat6V2RB9gafsJ3a/yWDreaal4/RmTS2uHL6UEV3\nIscC\r\n=g85y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+j46umy0NxV7VFPEYzebeuHt377m1jiatUGRo5KGRAAiA8wfYRAqxy61D5AmrUTtpcSJZbBQ8Kw1ZtxoCVD5VJ4A=="}]},"maintainers":[{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.3_1567165097203_0.7394213245550267"},"_hasShrinkwrap":false},"1.0.0-beta.9":{"name":"@rax-ui/filter","version":"1.0.0-beta.9","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.9","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"87f09243b1cb87950b29554b3f319c23bfd4b1c9","_id":"@rax-ui/filter@1.0.0-beta.9","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-o82RWKWzoO3hzP+E00a/s0rXA05NXwOoe8i7xe2zrpfPCfqipfzvj4276hzMg5dGIiZ59ae9+9732i3NrjkQDw==","shasum":"59298396e00806b59a6e5662cbddcf71a8ccdfa0","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.9.tgz","fileCount":35,"unpackedSize":90792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFyTCRA9TVsSAnZWagAAmzEP/1FWSA/wYGJoVvZTwl+1\ni/svHrmzpgQryPbbC+9hvJYjGcsaPMD5xIIpAzc4ITk8JfcRJ3C9FP3VMoDF\nTkOnBSL0Yg5otJyIJyDh7jQ1Kyfi4y6kebEVrDIex0TBFLOq6vmM8+qYUNo/\nz5uxOHzNiuigzbO0jDQ872zMlfGwKJuOJPRJEHDGQ+k6l670L/E+Q5yhx0bN\nS65XN4TFI5UwCYRHNPwXo+IndLgIHLPIot8cazujgjy155grhnaf55tvTkdi\nJXxvDaTGLHd33wZWgOQ7yXPu0y7SuawZgQQt6Y/xHxgn1EaZ3c/gAwobBfRw\n7Q6FAeySk//cogDobGOrROgV12R000wLCwdrXOpe3WbhhUvTsivZM/9VKkNJ\nWF54WZjR2vrU42jsnPNbZjI3PnPVJEkBYWg7QdZHOKYLhuzvMgZZgAZw5sNG\n+gynTNRqKF8eGKDdDOc2ZqAhGWRMDqMTPhAg/qFZfOg6Z7c9BaRZ2vaEiPT/\nXgDnIm6Gj2XrLhhx5NEmv4NygdamSlf8SdR37WxE+w3o/g8tpSUeDbZEG+K7\nFAeLI5txQQCq+koXmw+Ii+kJf/TA4aKSXBhVcybivX/VxBBzHzB+aWU8a9sS\nM2CuutglK6hv9pjMrdXZGVcAnODN/OGoY74eLKkD3ar/naZklQDLnGdrc81m\nRNpX\r\n=Qvzk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQYJhJMznMNAyYvRmhSgxBBiQFucwqHSJMEPzzkrKb+AiAGGnX/f7AWlp4l1kBQJ+cpnYNolZL+NcwXffHkmHKioA=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.9_1570528403069_0.19195200738924645"},"_hasShrinkwrap":false},"1.0.0-beta.10":{"name":"@rax-ui/filter","version":"1.0.0-beta.10","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.10","rax-clone-element":"^1.0.0","rax-find-dom-node":"^1.0.0","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0-beta.4"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"f3d8dbf72f563fa078a3dee7fbe759b7de4486bb","_id":"@rax-ui/filter@1.0.0-beta.10","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-wPKcpVXruer9HrhGfjSTZTZGsMvuiNgw+y6mc1uShff60KTzEbs6u9o8sIhbsFxIIVtxZuMdgHk7OedQ7Xt86g==","shasum":"e09ca4179c6196f2fa63a9c2d757c2fa8426cc4b","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.10.tgz","fileCount":35,"unpackedSize":90943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnaAOCRA9TVsSAnZWagAAfhEQAJ94vj4dbIUWLgLEyFjs\nNy4ky93MyVq+TxPzGLXCgYexuJsPpyEohYWrDucIP1Op4VwhdbL1VxQznt2Q\n8HU/AES6CU4xfvSgAzg76bAUygOQOhgugvYLWf11nLHfkUu2i1Oq7Q+AWaLD\npD+EV4Jd72rS3n8hhJUL3iI9Qepd8xmIet87r+ykqViffd0v5ygeKCHjxmli\nFajG06+/vJaoayj6OacTiqQjuHNVUe2edupjWLJFysuV6yiHdikDRq2fUBcu\npxRYFqV6O3XTBA5hgXVUZ66v074iEJJOqBZ+vQC/tW2ySasTiKFjWMREL8B/\nQXoDKyeGo8+ynYCGe66lIBSOHxx/iQQaIEt/potiRRnpddV737VFY4VIpBcV\nlrzofeS7d6DNg690zyhRK9le44oXF/e0nVJtITIeoh1QiYFIQGoZaxPWPCkb\nJuk9D28JKxIcrKOoNwVQkFkyau7pofPzk18xCua4jRIUnBMRR0cE6VVkd+iP\nswC/4w3fRYz4L4rwGXpbkj+Ho4iT4G0WPloVEX0ZU0oZ3Pl530gxqIhB4dsQ\nLQg2DrOgc0uBvZIGjr4RZ37TCiihdAOlhrbj3UCz2CUL02omRwXOElXhphgT\nahClyPXXgs2KgZtV+t7il0/7tT/c/kK3YNO0SLtamD3AY5RZxi4XkdLYzokD\nIIVq\r\n=DEQW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkmyoB3B2DUaaCCsC7SLfr6qm1ri0JLc47g+ND902dTwIgSnGqCb+qsomTgY8Mga3kex5KieyNMveuH2yhm+4M98Q="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.10_1570611213472_0.519131985546778"},"_hasShrinkwrap":false},"1.0.0-beta.15":{"name":"@rax-ui/filter","version":"1.0.0-beta.15","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.13","rax-clone-element":"1.x.x","rax-find-dom-node":"1.x.x","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"61757cad05802e340bf90b61c3fa9cf9f46fbfba","_id":"@rax-ui/filter@1.0.0-beta.15","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"myronliu347","email":"myronliu347@gmail.com"},"dist":{"integrity":"sha512-SG+swETb3loCi5w0SvlaW8XJE/LPTM3yRSGUYzTSwGExawknyz3IQv34lTI2eSLoDw5itlL6QB+Nb2LHB92BTw==","shasum":"e395e04c4bbf5c9b4c620cc5490764eca5e3f2a6","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.15.tgz","fileCount":35,"unpackedSize":97996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3f0HCRA9TVsSAnZWagAA9f0P/RW5avNplYGtCnNBbbCo\n6C3Hh2w2nakTk2CL/qlm/ZMXX9azJuRWnQ2jq+aY3jDTmryKI0bT3d5DxHRK\nfke/2jca4aJeGTjx+yiEgcrjCs2a0JjvtSVIvjOiy2L1b+OQxyqhS+PDJWwq\nBRkeRfLQhDBoc4pH4RQjx4YIbMXFJD7LfG+cxr2abqb1v7iB5p5s0nEIvuR5\nU/Tb0R62oD9BUcrLSL+6+pZThC4fQXYjhaD0ASt1C96WhSEb8tdh0eopU+v0\n00d1eOcRSasmuC8JS8rKo/LybMMGY0edhH2zBtS0AJyx6wnoOJFG16XOUEZH\n1rw53YdoIitY5pnc3TJ24lR9dNt0GnCPxwP3YZltHxRWKyAcoHClGEGWSoxx\nQLhPoE9wtZxt4uvsMXRZobs+04ITiSU9L8BCbiiAsqvR7I/+vX73ThbxLaxr\nPa2W5mWBMAfpLOg1erkXOuItoB9UIaAgFZfgoES0atIzyHEYcKG4wuCPsrDl\n47F/uUFusg65t+fpxvO8s3Osy+lKMRGqkIoBhp+KuYZje4KFkx3EsX/C1ujW\nlE4/rL1yNczRNLS+p//QgCXNea138heWrLWOLzoiE/wvDFT6c36zO0ziN/YW\nFTOPI8QUkeOMyKfCRk9ymgQGrkQl50xLyhdb8qK58YX2jsjcARiJCe3eTXTb\nZlmW\r\n=Odxb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHxOyqiX1KE6jn6kqiS4Bs9vEIOKB/2y9pmJTOtMTFvAiB1denRUOxpI3cjpcBQgnXRSgg5BoOShbEsUhgfJcalhQ=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.15_1574829318627_0.24202953126368665"},"_hasShrinkwrap":false},"1.0.0-beta.32":{"name":"@rax-ui/filter","version":"1.0.0-beta.32","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.32","rax-clone-element":"1.x.x","rax-find-dom-node":"1.x.x","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"70f73386e7a2f364c179099d7ef1e532b7ca7721","_id":"@rax-ui/filter@1.0.0-beta.32","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-+nOmNsbnVe7Ta6uUSLZ2dSpg7aHSxdkm1wibLadlp/JtoAraaaGshxPDyYlwt9qekVM40e81NeKEbdgrM6EGtg==","shasum":"9c3e6b5bdf4aca6ae9c623b1071f49e664654718","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.32.tgz","fileCount":35,"unpackedSize":97996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVQYeCRA9TVsSAnZWagAAe9gQAJ2/8OpEuUk+Z+1xbr1+\nQnGF0TvJvC5F3epr3mK40QR0fDztUEUxAhZTDM6xgS7j00pYzeMJnc8HRx+z\n01Bx0rqKEgIgKsKF/zFOvl9yKOUcqag3sYrGgY0bwPOq0jBAfy5N0EmCojTj\nJqPd4J9VGfOI54WvfvX3ITOuvj/TIdFZYmKuKEHEzeyCz90CoGqBypkQT91o\nc0AVz3PHUgfJiXJFpDeEmSvzhPnbvGB2no1KQNtudXDIfsjjkvmduzW+1qRH\n7mPKeBT3pYqnZnvX+4L5UgS9C/L1cFzzNCwoHQ+Jaa99FV4vnHUjZnJLmDDo\nUJy6eHNADg+n+rVOvKgu6PRuzSUsbTvrNpGhX9qJ6Gsevw9p8j/NEmnu7JeV\n4tBbcMmkwdvQvLEXNgeMY3fujGgOf8bvu8akiREWjI/7LZ8Ep6t74pJm7jQf\nfp/ZC0pFANBtQ9l3B8cO48E2uQqYM0u+h72nsNTLdxWprEl+M9gfH96qHjkm\nI0TlbPKINw1+nEdcqbFIYNj+TnxyT+KQys0eSp5WMnwXPi+qqLsUhIkzZH/8\nlWvc6mYURuXPBRsWIxUblkx6e3+J7KW/SNAc3tCu/u/1IFoZ8uoyvfbzeSYH\nHS/3wZmFC3dj6162yGrhk6QM/fX+qi6iY6bZwuwBwTS/PJgKfTaSF68gxDiz\nk1Ba\r\n=vAnR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcjYCeIeIHUhHt9Ml4JGddq7vw+ZF6aNoyb+Y8nSaB1AiBHqSdpKx/Oc/9itVY3cUblK4tG4ViVXkh2lczCsvSV4w=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.32_1582630430369_0.40461645391893697"},"_hasShrinkwrap":false},"1.0.0-beta.35":{"name":"@rax-ui/filter","version":"1.0.0-beta.35","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.35","rax-clone-element":"1.x.x","rax-find-dom-node":"1.x.x","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"7871a18e6a75c23d91bf890bccb9544fa7272b50","_id":"@rax-ui/filter@1.0.0-beta.35","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-ePUcwBZb1TdnOXggdLPOpcA6kjNCgtDO1WYz5PHcRxeQk5YXfANS0oK8raUo5kPG3Z6LJffLYuKWqqWZD6lxiA==","shasum":"8b1e1dbdb989d361e1e6b342ddc9c57de1637eac","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.35.tgz","fileCount":35,"unpackedSize":97996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb5gyCRA9TVsSAnZWagAA1FIP/j8l+JJmWH6U6Ra1PjPD\nh0cRr+b15H+IHwsd8EODrYw3KtqY56VuEeNHqZ92FRbWYYklYxB6E0d3iTvt\nAVpLL4AEQK2l5wOH4NRhxebPgwC7ZQem/BktCsTBCl2j8+NzmLUTeJ+ItSO+\n3FXXhZMA/m/1Fz4HDafsJOF21v5nCJwJVxfmmV3zVG3PzMuZpW110Xh/U/9j\neBbUUym/Py+Fisf2wGZJZPrnloBxktXV1gZYbGSPoiT4+PHnu2qj4eDt3o84\nRdvP45sd68jc1VCqdF4Dp3bPZzOXiWXFOLqFZG0nN6EAjWIgBlUUpPmfmkN6\n0Klpg3msT4QDJxrUUQPCXTjxHlkDwnk8cUUpClR6K9AAGDube9KWAGqhigdZ\n9vntJNU6SSqIDS6+Kzi2l0QBZIehD/ggGeNykGX/GPNevRSqQ3wtNCdT8Vba\njBNBCGfno67akEOUPgLIrINHKejLXQOAz4gU9RBMUlK039FeQtM8GpQnFr1j\n7v26C2yzShywWgKb8FG2amvh7zJ02zh6zzHLWXXaOBlGbs+5P4YTsV5Fr+Jb\neg5EB1EsVPSu2Q/6v4wq9hOcYH2t3r+qqzNXdVXnxr9N4QTh3Lvyw1X8PgZN\n+d7IldGQ3DdFO9aHeicy4L9k0lH9wMtHnEp2bZKrckVZ9kVjp/X7XMF6bN+7\n6x1c\r\n=JPBB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBd4xSFZVuf59OIRF1uxMScqWBcbH7W3FiG1FoRhD6QbAiA9HHFaQqGFy1I3ogMMeAdy37FTuv91IaM8utXmFvT0Kw=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.35_1584371762479_0.9775040604325176"},"_hasShrinkwrap":false},"1.0.0-beta.36":{"name":"@rax-ui/filter","version":"1.0.0-beta.36","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.36","rax-clone-element":"1.x.x","rax-find-dom-node":"1.x.x","rax-image":"1.x.x","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"1.x.x","rax-view":"1.x.x","universal-env":"1.x.x","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"a48523a112f5eaceacd677d7fe53935d5c543826","_id":"@rax-ui/filter@1.0.0-beta.36","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-YH5AnbhH0ZuU49SiUPwQpzBkWxJGXlQAzdFqsMOXCNL5r36k6oKSaD/EZRbdGlQwjYf5KWgjV1JLPRZnSN/odQ==","shasum":"1373654ce4649e1866bf5a9ea91f1cc91044149e","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.36.tgz","fileCount":35,"unpackedSize":97996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec1++CRA9TVsSAnZWagAAYPsP/3pmv/3ECLAWzoA8y3NA\n1DBLWsm7K4/rYsVNhpQ/inxKa7BgfYKt2NQ+VFoC1Nd+ZKshme/FCqR7MggT\nAIOjhSz8lTWopsDXWLVSNpLG13dN4sohSkhR2F8ivHpTgP9actEdClDIcO0c\nAZGPHlDZjWEulj8HNceVkmA3WM+BpsvmSzjg+uUskwggmxDiMEjRK1wqfUmx\nUBtM3ZmqyMMOZtUwws4YeKDn/iPxnhc568ELEF+QQ2floosXsGLtJaIjoNKC\nwwC/7rG1haBTvP5JiPCMGuI5kFrTCHcSn/WQP/VJE5PDtd59xaiFL33sSYjz\n7j9ysG0CXOg+xAIACA4lvOhffVCeHKopANPPT3xRz2s2JZxZVdgUv7sEqTVc\nwx5zDCDO7CWX0M9q+7lMsJDUPrc+BpGzTWUCMDCoIE4FHvO6UBq6KkwBWP6A\n2joLaxYwBRK+aushs+pRA0V/h4m9SVCsE7si/VZPxOjZdJtl0fqK03UcbWf/\nbYjxhgBBC2+hDM4gJ0m++/B7qT1RdReYIjkQFSUZCz2VGtnYIgVugbmh4vRC\nX3UnpwcnMzOH/TLkO+oqCCfg2n33wiCfO4K5wVyWSP7qQGqs361AVXkiI8Dc\nd61VlkW7TIyJ7SRMiyQrNI0r1sAz+JDGTAAFMGWausg4ieeOBa9WsumPC+kH\n7wdR\r\n=w2bF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLhjV7Zmsu834T7xQiCm/WAZaKOg8zx48CGEzqgAOaFgIgRptMeuODtbF/9adWVvhGwZaXNUYqAS3evz/b3r6fGvI="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.36_1584619454136_0.6276241341318327"},"_hasShrinkwrap":false},"1.0.0-beta.37":{"name":"@rax-ui/filter","version":"1.0.0-beta.37","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.37","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"3d519588c027c0f9bc3b6f80cee37582cedacdf1","_id":"@rax-ui/filter@1.0.0-beta.37","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-VV7jXQYD17bhaiTjBdqt13sJu31cCbYWtZXsbnPm0c/bVv/ULjQW+AUDNUNZ62N8MuuMR9dJtigKGrzNqSTtLw==","shasum":"d1c47856ae71b7927f66ffe4972c148e9b22a569","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.37.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeL+nCRA9TVsSAnZWagAAxtQP/RBwvEQ8gWLO9+OGMV5z\nnL9rOgvADQ5lIixxInwNEq5P7PKq5ADjJ6wetjJ6SarxyHmcNk6oNT1C90l+\nrBkvjL+xNASgOFkrwdgj4+t/nhoW54WJc1wJastUXDK1I6zF1kgTOnefX94r\nLyIxTD9uNeFUXrB4FnguDc7uabHzb6FjZeYdcInkKUUhzaOyr02mS5PciFKb\nb1Xz5oM4GDt/ScbguDv4ysKXu67V8NEbClCFjsQBewIrp5YeuHtc3sZsUrHq\n/fB8LwnZoXAv55cM05Fx8GcchXrZvWGW5t+0BEamVUH8g3zHyLUrvioKehaa\nANgQUbgnZgpCRuwVxfxZ/UAOBO4WE58HvdvHFiL6ooxVz64/+Uzi420ZGRIj\nJidzigWO5VwuzFLs4t5DE5q1+KZvlb7bSfK5OicpnJ9oqTxBvkROoRC7NRqe\nY81DIOlySi60Xlql87DWypJJxDiQQUMNbGIIMYS9Ol6TI3apurTNVfXhmsn3\nVOuvRRaZH+izEQ5s5TogrSue1Chx2nrMPJ5zaxHH5StVtZRedO/eWsTvISSN\nnmPcyKjpcefvCS5tKzcpeOjQplWjSyrxaExOWYrI1Ey2ETz9xtbwS5o+AITZ\n2GaGXYacFFmq70xAyDI8l8J8WbE017g+0GOxetRtAoHdzTZFJDy+5kUt9k2M\noOm5\r\n=MMZE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwpZ4v3XEVOXaKSgcOb5e1/t+VXyHZtiYH1TyCTJyrCAiEAg5VXPZS4AMzMh3GL+05SsX2ZRWoCG6CMBTlHGujJuEA="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.37_1584971686697_0.6108985856499605"},"_hasShrinkwrap":false},"1.0.0-beta.38":{"name":"@rax-ui/filter","version":"1.0.0-beta.38","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.38","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"42af6cd8a978173222e549b49f7d0d316dce20df","_id":"@rax-ui/filter@1.0.0-beta.38","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-T26t5ieFRWTj6v1CVp+QFvy51pDHX35OFMm29MlwL23ov55RGPhi1ryY4OHL4vMiBfkDjwe/ptZsOHv0ILBasg==","shasum":"ee974997c2afbf2dd2c8b6e75f12173564cd3a5a","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.38.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefKGoCRA9TVsSAnZWagAAcakP/AkDcnbulN0zqXh1p8bA\nmuHS3TuELvhEgE7TUnp9rtbTLtUr7THdISRTMBkniCFDv35Xsn37PY8MkQrd\n4+8bRwm7/4I+no46hBZNsRjOK3D//emyF/6LcwfibbWrWsynb3NoRyzXNjVL\nLjrqJ6qs2xcH30Qtu/5BbUDOlHol+k/HfmSti5sYkQtqfjbO902Ir/F40ZSR\n4bu9Zlz/JUUOZphtnDyXSGbpLv6cejn3DJPG+9bc30XU/SCjKrKdvtejKLdD\nj5VoxH++DZXAjbZqm4GjfM557ugKGBrMnJUZqu8PgCAJXcedv4W1UXgUOXTM\nijEae058MGhiaxhhnxP2Ws2om1vfjfcnfzlZrHqdX0MY40yfq7GquR42yKqY\nMpXsbau+3i6g3bm32JHPWWZ++OSme7WzQWjh7H3AokRJ2vVVorjbhI8kmzGd\nUHUDirBfh4S8b4bNvljgmumsZhzlSbgY1xgfDon47gWvu5CZpKKWup/JN0C7\nMFJUktCe05bhh5JYKsnOOZYYjmLvoDNI/GrYoM2WNJpAetlj7vdAdIKgI+2D\n09v70R+mm1I86TUR0flEl7y6G0iLmvFI3NVAqq2MnN23XqKoxL7BA9UvATYd\nEs7AD5pVRLo84Ybpm+cWVYmeMU1i+q5NIxDQoMhpp0+t+uKIW8VTtwMMRZL9\nphd7\r\n=oAFK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNRDXksPJWxTCuhn5G0uDMPfdWN2Z0Gl07f59vkRrHNAiEAkvwZOhmkp5btmTPd4R4If/VTPqniicl5AdW9xz+pk98="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.38_1585226151876_0.533415883095306"},"_hasShrinkwrap":false},"1.0.0-beta.39":{"name":"@rax-ui/filter","version":"1.0.0-beta.39","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.39","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"d3a5d41176349fefceae7b0178f59fd50061cc4c","_id":"@rax-ui/filter@1.0.0-beta.39","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-GZFDTGbztqefNch05gvh3U09WIUj81YcHpkKNxJ21dDZSmtBK+NaGbXAsT53OryzubVrH/Div1bizgdJlXIFHw==","shasum":"7ccd8968af2c97a61f9ab8ec4d3a50af61a614d6","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.39.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefKdWCRA9TVsSAnZWagAA1s4P/23df9/6vot1J9DE04CW\nNfp54++d+7XdsxA4OHlSdnPkkENjgvdNP6q9jQd/Tnrcw3P37tXDvNPnvi4n\nXVMgY3OBcGSzQXFTpznAmmRW/5YnDWxKzO7ROlNXjq0O2XGyKuG57PYykWUA\nxJPEWzwQCYo2BRfLFUg9oFJ0ycVlHswuaXoxWrBZ3/O39EKcrYL3zlSbJMU6\nTeL3NTV1sdkocoTkejtO3J6svhzhd5ZfvH85MPsz896lmSNGen2oViRS4zwp\ntcYgtQBlb0Qg9iBRU3ni4JCZBdTVHYBPR/z2txrjt969ujP8/fAtCLa92Jie\nKMcLo8NokyHsRT78alDF8KX91HHPqiuWtCSmhOfVdje2PKkTffAFgz/oqfRY\nV8NnlHqT1urg9PzBSv1JipLC9ab3wfJd6NHVAAcnftmN4Y6FHmKnDu40p7fS\n+wn8AbcKMv4HHwj6KRFjwpI7ucjEHlFiPDb+2VH08mVhwpXzbXmpPg4iMmB9\ndqFXAyaOtJ2vERDU7uz4wlGr56iZsflevqWZIsXX+vFD0YeI73dOjemUQ6VC\noTijlvrjS/IDO3ZmN8Ow3iCw9yJRzmOx7wN6TcbtRcmo5L9c7acBWwv4DGCA\nFx5yUDULgoE6+nNfVfHeWH34ENlFa5I+WIO1dfLY78lUpGpDhzAN3Ku+WwjY\ni1fu\r\n=80wy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm1Tw86317hLggNb04JBXcwacemZwSNvnQEBdDSYYaCgIgL0/t88Rz3kBgVJI+xeVYji6f0igQsTXhvZBk+tAXlbg="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.39_1585227606531_0.415177969138925"},"_hasShrinkwrap":false},"1.0.0-beta.40":{"name":"@rax-ui/filter","version":"1.0.0-beta.40","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.40","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"68d2f1937fc72ed8301176918b798d7a21d6ea80","_id":"@rax-ui/filter@1.0.0-beta.40","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-pDAtCGfq+Vahlrcb7vNSmslvQ4X+Xn6BiyO/NHaXNfeiRTud/QddEOJ0Bhf9MOnzX5l2ZXUuLQrFJy1sZ3b+zg==","shasum":"9efb29cc5a5dec745aef13abb098934fb8d72902","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.40.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehdrqCRA9TVsSAnZWagAASgsP/0sFkY7f8Ka2Xq05w2Xu\nb5OcXYiKSXXcLNn241j7GeYTl35MvJmik3Lj3FRJqUVG9dhDKexE5hQGKVCc\nDUry/SivNTPEVJb6HvHaGtUUEyAoxlf6Sip6s3xN4tIcFz8pN0svNzRkWEBp\nLOWo7fTYRNmgFx7015SNncy8cbkFpBprrPJicoBKeGEvpjf8PlI31gsnxCAR\nVhA7TlLuzpRjsNi1KBfQTmgx0AuMMhqMC7RmRbqddLlowoT/tJd70ZjXjLKF\nrYxvsPbCnDiO7vYkC0X3cWYn2CvYK4XH64ga2eVihyQQMKtiMiDr9HeHAaz3\nWxLENJABc+ljNp6APKpFuJpHvSb9Xv/dZ9xscKbXAzRQNP+e6VYwPA1o3b0Z\nIZYaarmEvI4s6LsyLHFG4uZkiCIyzpl6JUo7GCfBZ73AG0tw+J7FaKPABva/\nHGPyodU5Yo9RRxVC2wI3MfNUnf5y9xKoBaBOA9VBxt6XuBmzWHkV84YucbWh\n3BdrT5Ios+Ume5+KRi7wUQTebj1gm8MvKdMqzgo7MqiSnHkP5o2FDYzcRSzm\nIMzOmU56dKh66JkZq5HZg8kmSEBeeyjrPtO92PEtRlnMG9a4+JTI7+9Ce0wM\ncZjhasbWwH+gkd0SqlZ+erhpYLf0wfCTuS6COiIj2G798GYLDHkvSxHgspcP\nlteu\r\n=QlWj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQuT/d+LeGWUdOWk+CoFJqB2ALfrR7oWwrr2Ko42PguQIhANh+XW+itxIY9HSJye2fSfafC/cxC4GgMiGQRiqFdVJW"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.40_1585830633763_0.23127210783463625"},"_hasShrinkwrap":false},"1.0.0-beta.41":{"name":"@rax-ui/filter","version":"1.0.0-beta.41","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.41","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"f4607584d75e3f0ec5c65e2574e8aacf3c638809","_id":"@rax-ui/filter@1.0.0-beta.41","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-DkAgDq3+zeaGNBG7uoOXxlM5XF9wuGuih0HUEVOn+1P3S0AMC/8pvDpVcwYuFqSLRTeia/1CAFJNRp7c0+G2Rg==","shasum":"06792dafa8a38e421154d19d3cbe5fb4b056983c","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.41.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelbF8CRA9TVsSAnZWagAAokkP/jfkAn6W9K5isJoUhhj2\n4zeOExUw9Dyg2wxzjZDZoTwQ3k3JemRWPOxaoWnwmIMcvwm0uc08EM7pMCc7\n3qoFBW6do2SBzbFBFnBbx1vUo3YpNiMe4IcX5AAspVK57EvPGLbQG2UxKQJg\nv9eFnu+Fd1S6litv9um4dicMO/JggbAX3QpVNDcG1/kbV0LJTFFLQVdG3lhR\nBpvusEX/PfcOZ3WCbSeDpn3ATbBcmLrdam4QVyVXQvQEUGx5NmLyziPpaNzs\no4KYK6ng5RRMLY6u2ykVP7UW9btxHt74T/VAbkaSYR+PmRgPCqXa/f73bdoo\nTYgvY3Xtlpt9rWfO2OHZEwa4vspQwze3RnNcaSFTkE6WiRLOicO16uktnyPu\nZEwvvHUBY3nCJm41F25s3QSyNE9x4Sqq7dFp22IVLdYH9dgnQaScQE4JUoKG\ncHtpB0DCR9C1xBoZnGsP0/h46BT6xvMmpXzYnd1/+7deAaji4g2NFahLI1Hj\n39dUcgnL64Gb0VyOhaM6U6z6RM+fEMxoYXqTD/JLr0iQRXUqdnXlBccn9ivY\ndilzCzlSFfKxv7vZVSSg3kM5wHIyFj/c2xF8ZBfyAhU6lqf7L3CPcN0MRior\nl2z1qZftbxNEN+tMd2dphDwaiGrz0i0l7xACxMfZ+fzwHU1HJyat0aLAwFly\nQUw9\r\n=3LwO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4ZCaOeFWZn5HohJ3+/cKAYzGn8vzSthLWvbPEcyV/MwIgcoyXxtI8gN1gelQdJ/inuaJo+fVtlDK3Q+/9viYTr8U="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.41_1586868603561_0.45285884959623846"},"_hasShrinkwrap":false},"1.0.0-beta.42":{"name":"@rax-ui/filter","version":"1.0.0-beta.42","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.42","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"96ed81988f37700cd165a8ddfb51bfd3cb7701cc","_id":"@rax-ui/filter@1.0.0-beta.42","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-iFiECDm7SOPcpWs5tE5CURRpnzdSjLcFkJIydEx8iEsPQ7oLkPeWd+5YTJU2P5iH/fTVVsLn4PC6Nk55d2nyGw==","shasum":"1590dfdd5dd665377b5f2baf580e2b203451e149","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.42.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelbu4CRA9TVsSAnZWagAAyaAQAIPF4tPcJT+Y/oNFjl0L\nsUJc/B8ogCt0du0Hy8uvrODk8XcGOpg+Jd4t/AKfGeaVSxi459yJY2DxTeVc\nImfPCTlyqtCrIMsZPKVlIaHG2bq4cMD8AOhYE5A8DEUR2b45hCESBR1i/SqS\nNYyeZF53TMeLly6uSCEq6ERN19tlmDMhGnKWqzXpRDB+BLqBloQHeJtsEfMK\nJiKig6MKcoQ8m9Y3MI3dQXDNpPC6h/bDAnUvZxMFcuf+CXoZIqgPrwJ/cAHO\nRWeGij/YOF5kB+sZ6gXGNflP19bVpg6v77e88Kq/ZrupIrW//Y8quG1MWe/n\nuxWz6gOcF8KW2xo9RGmHMdtv3fejPg9s6Imh5LCBVnYdU5mM4jDUvMC47JLP\n/UOIXh+SMRBi1VG0dhnqbgRGrrunfyT6eOFFfXFlA7gtAVCCTqyaRgDOgg7r\nUx2FJVbrJW2cgYdUoOI15NFxVzbMYZ6KVnPGFANzwW7zQxkgcSLkRpgeg/DD\nqDkgPHZbDWy976wqc3/6mf/x6Bmlf/rLyGhAvAqdCSTaW+aA46+wKjtj1Yo6\nwDVTo74pAjLGtaa7u/YEQlWYNg/mEjH4sCTe4j4Z/+7z0wk2Mri+nYR5HgUy\n9Vh23o0dQ/ZImhy3mUd5MyMA85ksdAkc1DlbbcqecgQY1e+4DRS4+NSOytqb\nU0vS\r\n=20Zz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICcAiWtVy7HnypR4ojbDhK5XpETBz8AhqKPE9sMjcPIIAiBcgJhcRS/7pMWZjzl3GgJjp1bELryZGnEs5o48z0iBMQ=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.42_1586871224302_0.8505528304372301"},"_hasShrinkwrap":false},"1.0.0-beta.43":{"name":"@rax-ui/filter","version":"1.0.0-beta.43","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.43","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"f28341c4afca6b1b04521b99a97950f98dbea6b7","_id":"@rax-ui/filter@1.0.0-beta.43","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-/5aStuyq15z0CT+0LOeLkCikvtXtiDQMSWCvC4T+QKSQ2Hvbre684LCp5bJNZkKI5ERiQSDOywUtfXaOqL4+Vw==","shasum":"b2a4ebaf468b5cca30d0df563c977f1d2c38e30a","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.43.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelnvFCRA9TVsSAnZWagAAbqsP+gOyf8zlVkACOwMIljea\nw2kXNn4TxKNhP5nwnQfa6bHfvhelrf4ARA2BbSi0x/PgkmYvLmRP1GqBPUGm\n4WSyCIh47vfteUYEZ5g4jtKqxaGPMRYl+qQ+qlEuDbGmnQCfAI8Bi1xxkogh\nB5TbfE7NaJbNMEPbmPV2C3G9NKRwTQlqEW+L68JTZDxuvpRucNHkgOII7dyp\nDHDKAvH3N/ydWpsjpWTW0z3IKvL5ah54Y0344QKkFFEOD5K0jSRoWrGBCeHm\nuwMIf9HiIgEpZz+hYRnAey+6O9vGqChgC9KMnUc/aunWT0RV8AnFMW/r974x\n+nV8Z2lVMThGp8EndaL9G0UBDlPVk1E0TlP/GA8MGjU4ziG1lezT4DrOOP9f\nSMYx3F2EpGS2Z8BzjYp71Ejv0oFvX3U/8SQpFfRCLWdKZqQ2la11Wjd3AwUl\nJtIqMBtGl+phOdERo0H/Nip/L6oWdsi5OCrtiruX9+3HxlTF3946A4Ayuhl7\ny38fV4BOJcGuZngW71rm9n7DpJJI8T4TxltzsCsKc18Im2cOPE4BpxgIrSVU\nhXrGT5AXLWMO8AL2hrUbKojgvkHOKY0kxhJWS+GVsDdQ/p5Or61a6WqhYmwZ\nUx7KOgewZEH84FZ8Y/8uvKaQBk3j1mQvpI0l4xSS9a+m2H+xeamHxdS3JLaI\nPTAY\r\n=jXsc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSlKCalYM2woS4oxCJNzWx02Qbe354M8TrFlfPBI4N/gIhALYRd5d7fzlZLVgscwKnfHuVNUG/Qgn/FZ6jWGn3yZfY"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.43_1586920388211_0.454263669901664"},"_hasShrinkwrap":false},"1.0.0-beta.45":{"name":"@rax-ui/filter","version":"1.0.0-beta.45","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.45","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"33d06677fddc56c4fca497ae6bac800af400e634","_id":"@rax-ui/filter@1.0.0-beta.45","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-KsJQNJzdHFysY6r+l6m8itufhzolIYOw9VuzdIx3DUYW6+txlADoEzc5CPR7cGEjN517qHoVOpvsHKNaaBhvUQ==","shasum":"c1b7ed35adda3e7f96c454e2d41ef1f69d65ee4d","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.45.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelq6VCRA9TVsSAnZWagAAhe8QAJs/ioHEQmRXvngZiSam\nkMfCXaZD8PSIjNNhFXE56xdxDmhx0p8+mt4uSoW8uLi8/362sqisHw6Fe3V5\nvMXYjOT5RpX0lOHvPtfhQGkZ0YAw1KMvcX54baYy0uIxUPN5gl3mowoI97Ah\nqY8yAsR11PfwqLqy6Ch3uCekr4fYfocH9ndC5pA9neC3FEutzPJj1BrtrLx8\nO7+6siJnIW1V0cTn8/b50tYoArPz3SYCVTCJERt3HkzISP9KFJtmH21rBIdJ\nyBXqlnXBd0JpA1Db7RASU1bamf/tfl/iwwhwZL7EU5fkrRoC64QF4aUlOCe2\nQVJHXgGFJ+cYX4FHWW829raXAEfm9ULxiSnj1EyqeBCYWOwcUdvBVm2Wot8P\nBEKCrJQdaLoNW8f13bPLCQ5pSdfWvITWMQBogCMByZMPZpWihYIePZVPl/Wi\ncFKF4wgZx8CZEQt1H4JUzPGXPFFf/mGKiG4pj54U1nGE4i0Zb9hnF2PCYor6\nBRAH5866ISragU2dPbJayAf/2RvU64RaozOvVCwwDyeIOrhptkIJh2/iCgMb\nDILQL6s7IFtZhp+GMK5HbFPn64qkc1BGaqQ+VptbWat1hl9+hpUncVCZv3O1\nwDL3wM6qOeI01Xznm1qu5PvTXkARXtXTesAv6cKnRjsszfDjan6jFKN+UqAm\nNE6T\r\n=xe+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUzAx2M+EENT+IyVCNxlK1bVEwmLJpTVmJGykWMVOMHgIhANzoADlqXxMjM8onTrDwG9XyKg3YSJhpuPXGFM4bOucm"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.45_1586933396908_0.5499556278013689"},"_hasShrinkwrap":false},"1.0.0-beta.46":{"name":"@rax-ui/filter","version":"1.0.0-beta.46","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.46","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"e7d8db62ce6aab826718c63add9595411202cb93","_id":"@rax-ui/filter@1.0.0-beta.46","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-eHz6PZvFVnw6JhtAUJrngjsSUa/ojYAtKm65yIfap31ql5v1d2pOEeMiYQ6ItDRr5d58anzW5L9LTqXmVZd7YQ==","shasum":"f6a9a55d2953865eeb5a7369d922748fc035bd48","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.46.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelwQUCRA9TVsSAnZWagAA5CgP/1+E69/iUYR8MnZPo2iD\nOJEKaIiJ4j8gEg4jtVJB8T6KQQkzePl/IpCY15g9noKPhmApzrkj9QvMIzKw\nWsA9K5IPm/Qm/Jl348bUNcifAEcvZmUlnAM+w+fhl+bOhGMHGXMYpotZwEnm\neFz1dIj2AGcJ8I8s7TjhWUbAjJea7Mz3FMpnMcBcK8jXriY8khI2rS3+SXpF\n0VsE8XeZapeuFnptedhhJUR2Q65W/kVgNSfM3fvla5kHFitozM/WyW1BeHKR\n9s1q7XlX0J/2KR67V15B9EDTxFyQlBN1sDXvWPC6fuHwmfW/cEj+AivItqRs\nEgKwSlTgRXsLt5fiHLFjei753z56WWVgTEmyRk4hblcq3XEpUXN1t4zXEgZ3\nlaTRueyX82syepk+BMtloWePOJ5Wjovw/i3H5ObTEWHHKF6HRO+4fWhRGTc8\ngMVgA/nI8MRLI1NEvErSf0IXgpxu+7a1b/KR3SQS/tUTqRouTJh8hWK+U00O\ndk6RUdX5B2ZbyAV7ki5Z1qIDMkMlsXNX6giK2TpxvuFoGUe8MvpdIYNwTo2F\nvXQUM3bGtHImjizbpbZYiFs7T/98mlywsqlFpuiGWE+JIAOjAJyszbyHcrbP\nTW/emOwUyXWCFrku1mu/u+skFkVjhFosS5z3OcoaBndmiaJlexPkyJH770yl\n0DJu\r\n=jZN1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGv0GbZGevlgexlo9Z4Rf8JUXyzxX7VWCFlOCKnp0q/aAiEA126ELT4uPISSWDyJAFqkAPCkAcSkkwVSvGVhIGub7oY="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.46_1586955284009_0.8341465083917428"},"_hasShrinkwrap":false},"1.0.0-beta.47":{"name":"@rax-ui/filter","version":"1.0.0-beta.47","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.47","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md","gitHead":"2b459a907e7df0a32b9add2dab3287353bde7c91","_id":"@rax-ui/filter@1.0.0-beta.47","_npmVersion":"5.5.1","_nodeVersion":"9.2.1","_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"dist":{"integrity":"sha512-ETZ7DHWu9MiihkkGNWhYCt1YPt0XHN71sfH/7Py5vHx/bSSURmxk21vbm2mU04KOnBQZlmKz+ZCB5w+dHLisww==","shasum":"8b8459e7320e274c7d2bd795d947c62993de7dfb","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.47.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemVZ1CRA9TVsSAnZWagAAi54P/3a8tQvbpicmsYRIJdo2\nu4ylQMYEZLxTsRurvB2cniuVya1X/2fjQhSAkLGnTtqzNj0d4Qad1zvEpSbx\nmolwZOoIz3Slq3RDq1/BbncSSqipGyqp8zFAXqIkrM/h/Gr3QfvAiC/BrLkt\nZhz3W/6IdsYpso7OtQQpUYTyQQ1rjJGLCWdCcnhzOtIMjEcP17rJIvqqyZlc\nsd3A70h7bOmJEyHHnn9iSxM4j9WTVRLLjnDmvsA605VrfSxw+SoBgyctU8/I\nrIAg7Z5D7VF42f7iX03eMkX+PdJEWkr+t/KA2QquYjFAMWvtqLM306KuXIwD\nfW4LachuREL1pvAHW7k8ZnlqXCnLeQlxUFYUHoDWSWlKaXimAWeOoWMdUHgO\nX2XLBHRoLEbsdmGNO2raNy9+0lvwrAf4fnXnt8mSRxemntMU+6Nrr4sYOLio\npSNlJDjhpdYLC5krgVJ8Fs4N0ZsdrPyNBjzD2Ob1H/9X/ZOS5G4QzDjlK4+c\nvQmol0hiRSBycpB5E8czkssDpG5xs5dssK6poBF6THvPogwZZWk4mqJ5scSK\n0tvsXkXV8WRqpwIMAstCQvvO4ZgIM7FV5pwXq0pfzGXwG3BtOSJdTZ/zxhNG\nY+Ce4R+7ErmqjkAtVM66ruuvxrlyTPLpMx7deK3BJL5vVl0rFqZ6ftAEAM4N\nWcLv\r\n=dAiN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHe9wpBUvn6fGhT35K1dEaganPXmDY94UIPnJRexwL/HAiBFi/xve9SgI3ZWd9m0xOcuu1w8aksZ4XlIY5rGhZ92kA=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.47_1587107445281_0.1183016066883058"},"_hasShrinkwrap":false},"1.0.0-beta.48":{"name":"@rax-ui/filter","version":"1.0.0-beta.48","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.48","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"e196e3b64cc3db3f707c3b6afc71fdc2ad0095e1","_id":"@rax-ui/filter@1.0.0-beta.48","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hJCo50kjojEvZnFpLP33/A6IpX/v+cHWIyQVL7LxjKjAr/PCc0r9RALuT0d/hwgqXZnoPirlKeScofxkCTYVrA==","shasum":"b9dcfb7ab2410a4c7a74f90a756d702534d98ba5","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.48.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoX+1CRA9TVsSAnZWagAAGTcP/3Bqdms//iZzJJAbL7a4\nDeOjiTcFqvldDyNNcLFegkB+lAoUzLOb29SngeqlwYpSPWx/uA8Nlp+oOGUB\nh4hSwaltOHIdFBlyCSBnMLBjczgyoImCWLxeKCEw4G3UI6lXL6mDQ51kA40z\n5dZkOJM4y0QPI9Kgnj561Cl2dtlMqjx4mLjJRh8jSU7hMPGHkSaS9nbrG0C1\ncO5YSfVgj2n7cfBXSMKkGu1xbDAdCzmd5brUz2SBHNcfe37qTlDfhlRLJxkZ\nBwsZWHLXzS0Yyn2aZnb5UPiJB+qoh8sUDKwkkL6WrINtgsVQVmP1IieiUeUf\nmqtc3yNwWknhvgM3ZfLAo1HbtoIWdiQ+1AE9hLe4Wp5l+0bdsytD30p1cQI3\nw9ak9GPpmTcUfwldvbe32hjO8VBmchRVuzEWVH85oqUAFFSB730RGW2n+96e\nKKhRkFezTdTUHBTQCwX5GVatrmVUVtfHywf77WoXsZaBNY4M/3ai5DzOB9Ka\n0fKErOB8u42X6NW6VCnsgyDRjmv/2qSxbYMqB6ov0dnT7U82MIQBA+4RAQ3j\nKKpixKdw32ns3HNN6pceV1RSa0WTfVB4NmCJCBMZYgsqUOKZFxU6c+VgZzXX\nNB0mBcvZz9/3MR0aAm9UHg6H6npq0p3gs26oQWr+hka4TH7W6WYcMCxAKb9B\nNq6E\r\n=ibi8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5AlUc3ueNDKaddkTJKEq85pC98HY2J+Hgz/c9G8kG/AiBaFnXD89F69tk8MapnyWCsbZsyYdDg+nL1Go5h6Sme1w=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.48_1587642293036_0.41408057294528966"},"_hasShrinkwrap":false},"1.0.0-beta.49":{"name":"@rax-ui/filter","version":"1.0.0-beta.49","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.49","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"0fb0afb7d8022607dbd3eda0d71f62d45757b0c9","_id":"@rax-ui/filter@1.0.0-beta.49","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Jd+1R+i9aYJxx4S+G201zpwDWpNY/445N071tMUCFqDRqfz2ZJg/8qZ/2VlfjkoePMbX1a68ww8TJtom4b+F5w==","shasum":"7f46a3892b8e3cc4923c2f708e50b39d21325e39","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.49.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoYw0CRA9TVsSAnZWagAAtd8P/0i9ys1qZkt1CsLJ3cFx\nwlDHhdLt2kHTiQSK2fckMeNntgBLaEzsaxBN1DUFgM+r0TdMBd+qGsGjRGfy\nNfKjC+lB0rcrqnSVZAee/ttTmq8eqKUQoOOr2hJArxb+8sqY8m5n8SJ+FhDe\nRHjza0FDhLM7I9Vk7uizueOfv8+ajmUjYpbq+DhNLJCBmDiMjIKzty+e7QHp\nMGYDNdzeq+DLH/qbxnzUGOgUDHhbxQy6LC4YgIHxrwFdUv20XSZvxy0qYiAf\nWrWdCNDd2/FYaLjQzU7WQM3ExG0Dfn9NTwjrywQuRCiVZLiVJmBvfqH1dI32\n45egAYAmGLLml9PVWFSqFkY34fkZ+NJVpHRtG+zYxDJZx//+Cu+xH0ZC5naN\nF8WhcASDvReGALbydGH6uTnc6KBV3db0ENsL7EhNWqYYKV+rTX3nHsfCKApO\nmDH+/+8B6adnHuSKFaMn6WFgMD7S6scrOO51Vhy70DAkvSh2ChfNOo9eTIoi\nodUnYLvbz0JUDXjP5F3m0bUH99tuozL2TOAxL8Wf0LSZxc48m3WsRP6qZrPV\n3iP/O2yTH+Ojo9e5+IlnljYL94BtpKZtJBij/1+EW9+zi1A8QPhl7tTz0WqS\nS+bAlwgxuKd1n/aWdmp36CpUqyv8eQGLHCokUddwDqJJx3IE/swmxJaSvXwO\nsFnP\r\n=kFlN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDie9ddA+7544zS3Agh37b/v0eM5GY7SRZ0GoS32MS+nAiEArW+D6q2RH3qMxc/bNfYoCaz6E/ukjKAlXNYhpwB9Ngk="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.49_1587645491667_0.2370309778378239"},"_hasShrinkwrap":false},"1.0.0-beta.50":{"name":"@rax-ui/filter","version":"1.0.0-beta.50","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.50","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"0e3a514591aaec385c631728fcc90b2e53f5aa03","_id":"@rax-ui/filter@1.0.0-beta.50","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-6QfaqsRJr4J79L3rNKJWF6nhoMF7rqYcQIlFuKsDJdyBDcfuoaX8U+nUCAzaa4noOxJYVchj7Z04wsWHVy9RoA==","shasum":"4e256023f0071ff48131acd99dcfc1e88dbd860c","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.50.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeps0lCRA9TVsSAnZWagAAqWYQAI/8Ob650CpHcG8SHyIc\nquFR0e88BeiJ0H6poBwGSH9WXU69CrCDMRPuJxouWG+MPyAE2hadOsMwfifs\ntGlhR+N9fC9NRNzkTmjB91QqDK9qT9XyboQCeXkWoQ4YV0x3svsTVFwUfyDu\npYK1s+2ySLmathbkxYgOecr3mgaNAgMt83NjLYLLib3LWSgNK3flsvEBfbFL\nv4kiZz9i7L92qax6MGV8Oy6SCfZ160nSMd6E8ghXzQzA/NF3X4Pge8KXxLsb\nl34qlE78yZMBJoihkMrtc4NG7EVhFntorlHc5zjXul6G0Af3/vcJ7CUsJxKx\nVNPaTVfs17hsiYE8k+WG/lebYP+DOI26aFU0OKPAGrzjY34eZmXqDYW0w/Vy\nZz2jrOIlIyZcRhXO30DgxjtrejbMHErvFYDNAwEpa2flXgAECqpFW9T56Uny\n5gxatGD+XhUjwFxC1reQs/K4GrUvoUQjuL4hz/guCwQRPvmbZElexcPCBFAR\nZBzWGkwheliVR3rDTsdJiZMgUYeuKUlCVkrEFb/Rn+cORW/u5Nm2kqpFcNBh\nkG7U9Mqk7HbUjOumAyvZqFF0ullNlldu03mJzFmQXTIbkLZrrUgar3nyObrn\nPrKPaEttdOmSIfE5qOKZRp8c2J/picg62iefCtynYyyKTKNKG8dwVqzuDNwm\nm/8s\r\n=I4Qb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDlqXMF9SbKT2wsyIOEK5g561P4mui7ei2nQizRGKfJeAiEAlcgV58CnYhz8X959pZ8BftRPT7bjrQLmgFOaGt1ITu4="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.50_1587989797002_0.2699464141854331"},"_hasShrinkwrap":false},"1.0.0-beta.51":{"name":"@rax-ui/filter","version":"1.0.0-beta.51","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.51","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"de2c7868d85895c41961f88d7bb56b99e7e85d81","_id":"@rax-ui/filter@1.0.0-beta.51","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BqltckbjrpChb2FDAB7HwEDO2M6LRoSV0905pr9o6Dkf20fHrYYaEdOFb6tabbU2X20bbVlXk/jAikqfmjlQEA==","shasum":"bb5d7914c598b6ad95cf367c69799f1243dddf46","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.51.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqTZ0CRA9TVsSAnZWagAAnJoP/3eEkOG0QLQzlKbN4tsb\nnLzJ6mv9FVocIzuC+ndhjt9TRZacGiPW3Qk0JPKDAQrxBqe159HJ5guRs7eM\ngMvmh+XdrSWOxkxRGmEgCLmhQ/kYdWPKiAX1HBIdxRhUUqne8f5/SsRkbRHs\nD9Jtt+Z37WHZUtservT3ryA8HMbnhRex4OqRUo7GFFs9iPaWGOnC/ovusfQY\n+OlqM/+ksqJSLQGveiXK8MWVqcr5gPxwhz1cTAh+fCzBrBGQ1pFcC0pzYbq/\nw5FsboP028n9J0xLk65qmyRTwgAq5ciIHMo1od/nOO9flHee9Cqv/Uw5NlFO\nHFHn9BqRhSUphuKFODL4/W0p+pakw9SW/BFpBmubsd7NBt4Zcl8NW4rcvybM\nFbALTEGnKljAZeztoeqxQXBPJEVkAi8twcAkMTn8PxV9EahBvn62mLCaszwp\nnBFGT9uVWz7DECW8qcZ26+MnzGL8Hg/sSgIU6qx/OEty/4lyB4Xe1iNTKg/t\nxpIDGhovZdKo9PzqjnCo6OHrAOKaKR2PfT5WRSQbmNBfh2//uFN3xqxfoNkM\nr3iwu10DbHBKoOy4+uZFutvPbx+xoJrPgCfMStBofUN2Zofni7MiVzlc3tmv\ns3Rqz56BZ+MtWzljN9Q/I3CZyXG0I1rpMj3W/yvPB+bk6MB3bozvSjSH+t+U\nCHiU\r\n=CGOs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhUj0IGZlcl0NnMWnZmK9LV3kCSF6hjkC9NSQx2CA+wgIgCaI/9wBAEBl4mmgshlcBIbq9v14223GALcG5MTnNgHA="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.51_1588147828471_0.2892121182275069"},"_hasShrinkwrap":false},"1.0.0-beta.52":{"name":"@rax-ui/filter","version":"1.0.0-beta.52","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.52","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"3d177f42edc063b6dfc4d1e77f930dab3d553052","_id":"@rax-ui/filter@1.0.0-beta.52","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-JcpYgEoIkAOPPD82VHjPoD2ZVvD9dhmouNxq8NV4DHVSfUN1I9dMye2tkhD8bTmiySwAAVEBvDMqFRVuShyhGw==","shasum":"fdb801aec62c252adda6aad24b498604d685a3f8","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.52.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuPqkCRA9TVsSAnZWagAAVnMP/R0vHKkJCo1ivtijuntn\nGO/h9IQilpPrQdhB4PkaE3gt7Ffo8DllkViG0FBjvfw2LCDW3SQHylc+VqUx\nD34ma/ER1dk2OEXpVnTuOyvaTk76TpoSOu5Ox2JJPIuWowSCrCv69/IIq/aD\n5VPD1qZrytcT7zLck+y68ulPbjkf3e3Zb8evyQG+jTlv+YkMeGKv4xbOvx7+\nf9HdIMltzA0lT4FdFpFa+3c4SFGv4IgXKubjgMN0EgbtNAgdrpZ7ACNzmfGV\nB3bCvDPO071uA5WWfRoEur9B2ApJFsGlCdAsYjSaa0J+jHiRnos7xhMEC1/p\nIuxajR1gJ0hcgrkJK5DJBhl2p4FlzEwtmat6yvZTyXe7kUSNt9vbYp6zdrOX\niZ7svnRu984EEqn7z0bM6XrHDHJzFCak7F1M29UBsZcNVuUX6uoHePJVUnX2\nOPEitJeLXpJTE9hpBgIkC1QNsTrbN3VYrbJbdHf+mTJ490cn7bIK0G/qjsV9\n53Y34LNbPWwR5hRo4kEyOwCClcyZNE50zCKnjs0MjmkWqtn5uO+QUfRSqhSQ\nz9UtuWOYhEvVF60HrnU46vzFBelSf+hM7L5lvUrCxSF5C9hkAdWrrMF54qfF\nE6M1LXC1x5GIu+RBceyPKMTvs5uAPxA5SNQme0ij7l+R+a9a4/QBl9G9jtyy\nlLsn\r\n=tWS/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDywj7F0qqvfMbj995lsXFMK4eXy1glHwe5kju4EohNJwIhAO0gxNk4z/BlU+TIrKG4dzwpXkLdMLvykrIhLEYykCUv"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.52_1589181092139_0.1809083274173029"},"_hasShrinkwrap":false},"1.0.0-beta.53":{"name":"@rax-ui/filter","version":"1.0.0-beta.53","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.53","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"28ac8b193a32eae9ece88a89e504188dc6f36e1b","_id":"@rax-ui/filter@1.0.0-beta.53","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-/p+ix1r96K5OvoikXwbCY6gNb4YGAHAbPm2J59vC+wbUQykKe59XAGJjn+tbjAvzf12fyx+7RIlN7Hg728w5PA==","shasum":"c54e63db06b85322ffbb21c4a5e5f7795416b808","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.53.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeumcdCRA9TVsSAnZWagAAz1QP/RPQhoM3DNe+Ffc92Xad\n3EjWHB5OQA3AQNw/PI7IcV+y5qsYrw80ONMU1vErBKmEUUzrrRJzObeOQlkm\nc/RPDLdSjaEOHPH+2Sq4LvaIN7bKpSInKJfib8tONDw3t2VlSqlSdmEbr4kE\nFGUx6ee+LyUZ90pHCVO/SDyL2quXFw3W3DgXbAEozbTiJ6Cr6D1T39DI8Fup\nJzipPpYoDfxZfSEByJsVJJXQKDPfnwVsAZKBa/ZxLtYsuVS146Efmj1morvz\nI5TtpBHn0yuVecbSqA2J1bi2RPU39073aCt8fLIAeUzyTAaaKB/1H7/grGH7\nABFqWkzJWMC4FyWlwpQSk8FBf6KXs1lNFw5ZOUEIfBrruBxPNtrFerNHZJYK\naDFZehQZlu3Fc1wEdUbmCknBzVhpCMblJ3Y4IOfzxsfSWPoTBXYuB42MZLmD\nrQYFuNgBrM/YtNMW9fd+h1sKO8AIZevJxL0Y+5kb9p4ZL4WX7Cz3yiUS5nfZ\nupjS6kIsZX17eyibDLuGeGNQYNS4H2MjZr4kHAsm2mx0r9ynZSPkjGf+qDRn\nm9cVi+CqlSeefbUL4R0PVsid2iIXuknrEZcykwehRc0zFWCaBpAkwVkYK28n\n0PT22CfOfzeExiNuD6UJdP/HbQoIWeFq1mDZUt62iITi0TdOcCe0hJclas1h\n+9FG\r\n=tjCk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFCpdqn8Ujx7PXp45IWqdwG4TOt424RI+W8Pvh0ADuRZAiEAowrSckJl0D9a0+abLOobvYc4A5dHCaB/VFtEhHsGAAI="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.53_1589274396697_0.6394596136699828"},"_hasShrinkwrap":false},"1.0.0-beta.54":{"name":"@rax-ui/filter","version":"1.0.0-beta.54","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.54","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"def5fa1678f9688ef7c730a7d60d4a14cd7a1c5f","_id":"@rax-ui/filter@1.0.0-beta.54","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+Jd0unDi0p2vVTjoGJk/lrMtUsU8VFxZG2U2XHgAMZ7Hy2ptiKMvlLSa5+M0YgQ8mWSb2fxmRnOKbumeTPwgew==","shasum":"264afcc87953d561a0a111a0d90333789d1bc4d2","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.54.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeu46hCRA9TVsSAnZWagAAPnsP/3CtIRR5zz1aae7Xcqgw\nw8XKfib2UuIOicEdpMa5QLQaq/bt5pVEPZvSNFDfGTabltVNdtqxhu3pPUAb\nuaZWgiY4l6GMQNHm0fz7Z+6DSQqESHR0GgfDsqNDvCD0Cteh4Bta8ahix2eZ\nJGBNrxW0+z4H/pMFssWrPrTG+nzrbBWmKbGRWX9rH/UQh5YantCIMQrKmIQS\nCj3T83KV883OzjIoG1NuRFeoThWrydye6vALn8voUlBlKx72h2JBBZQnatTg\nuu96vHhYGeJ0lAllWb8V2oc4g0SGyWqV/KmYzxGGE79nssUtJm7J0+jqVAZR\nlb7lKM5wufIvHSsndr0FAOGG2A2e3Smt0rLu8GWydtBM8Ngd10sIDX2ZWzp7\nN+l+2hVQczUfuYcI0Yvn/jMaNTfx3Xo0ZiLDT8y0O5UOKrHUjnOX2zX/yZIa\nTxJzyyIz0GyxfRZMqdeZ4AgKXDzv2w304JREkcE3HFFybDkPzerEVlQg/YM/\nQid9qs0Tzjw5O3CJLUbXDh9RESr0C+xVGuZYX40nacMWL/HsvO/oUPAVDTQ2\nn/CNY7oWYrQrgBuYBlLnZrqVzvEbW05+MhT46nqfOJDwD2Bnva86qO03+69u\nIAGaIJS2jobjgrYHF4IbDWIuDNbJlDid18bg38qrRs9CChZ1UrQxfLVatBbP\nmZam\r\n=ncP1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFaJVGw/IV/azUwRXU0itQEtL/+Qx0OllP5olqTkEklAiEA/DSc64MWmyVMo+hhtcOiWiVUhebR9edMz/FOcBhHwjk="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.54_1589350049108_0.5769754911338796"},"_hasShrinkwrap":false},"1.0.0-beta.55":{"name":"@rax-ui/filter","version":"1.0.0-beta.55","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.55","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"3ed4e5981de96f11b29d1f45c93098221a57adb3","_id":"@rax-ui/filter@1.0.0-beta.55","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zvAP3FrbZjCDrbbmKDaT8V18jXKsBTpKenaox4A2QFTl2nj2ZQ3CqjPHoGnxp59NnlLs0kjYid9+6QnHSXtdGA==","shasum":"e797623b483a2d2c7c1aa718146b6ca89969b90a","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.55.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezOchCRA9TVsSAnZWagAAItoP/0NgnSrBngL05P7ZMCdU\nP+HHQr8sjyy+dvGiC9xsj4uLfZBC1fFEAqzCp+XwdLaXvhEkv9k99DiglMWb\ngQcDzWut6j6zNR7QZNes3NBUtBqbelJcpr09kjFBwKDdtQink0FWM8TLfmS6\noqk2NR8JjYGTZ/ZfZet70P/cSBum21caHKfs1n0saGbd/xz0Qvhhj/nzsGz1\nBB+LX3mpK00ZQX5RGMLZ/pxueB2WpYo592U3u7QmHixPAQ8DBBAWlIfmIXaK\nowAj4J9+8PJTwcFJO2LkBhFFDN2VeFUsPLKudMdIm1eO7KYyX+K5c4WXY7Ex\nrefRmf1M4lwRL9gqAYGTiOTzdCi+ccN0T/g5lkGe8uCeI6EweuuSkxGpmxVg\nOt9CCra77xUmstnB+erhIA2TO+B+jQN0ixISUlmefJ0GwZxSus+AewSf0Lfc\n67Q8JXfK3wUMupX43v0yeSe01xe2f21qQdaqyROjCF0tS1YksqtDwmbQIIS3\ns6bFclAi7U8PLWWEAMHYnuFMxWE+VE/O/oVBRoP7lQi70AU27qoBUbfjd91G\nzigRweuozxR5e6aRQBQ8oP6vfcqTFDkaD0ZWz5cxx9RmxtXlh/BKelMztbiK\nOlMnYakKDWiYdhlXVOdAUBDzavCmc5mzolSN7RYYeG9zxe+bj0XB9gKyGl6U\nySlD\r\n=SSu5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHzho0fiBVEk3oKz0wNFqfv2X/7HM/BIjSPOBS2q+8ycCIQCH01aUusSToIL1NUAAtp6gsJwJjHALTlHjKdBqNjEXUg=="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.55_1590486816780_0.22370958461749013"},"_hasShrinkwrap":false},"1.0.0-beta.56":{"name":"@rax-ui/filter","version":"1.0.0-beta.56","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.56","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"58ea5a099073c31200414662747fde4dd7ae29e0","_id":"@rax-ui/filter@1.0.0-beta.56","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-33kj+Cj77/mJcrTU65yCKzrVGrvSJ9w5Mc6C4HCJXb5W2LekA7qKEb0o16FctvmI5cNGOW6bXvkRSsjQPKnaLg==","shasum":"5e4bd4f31527b11b1c5da3c59922fa94b4bce057","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.56.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe154NCRA9TVsSAnZWagAAQskP/0ciyaJX1GMXZuF7blVu\nvMI/7PIcktY1HHvZDEJH/7uLQZOqJcYSlcsB9/6buuflZG90DMXXf/TEbP0s\n/I5CK+yTVbL6PH6tA0nBYhd5u8rGMhXOZNypgielLsG7DFEuEjS8N6sxkWtR\nDK2SH5Ik3VivFLIrJAtDfqWerGYdIJmmi3hr5IFwQZOHrPLbJ4bErcM38TXi\n5YLB6XchxgKbALGLup7PTxZcXAvaV1YM59necsAu7UF++B9IdXTDwCbK/0aK\n9cuJ5amU8Ox9z4YSDxWv5NKJ1vcpOrdPQijjts9n10WPhsQN4jpXpEpiqTIz\nIe0UfS/bvO7WNZF0eQoTM4LLus0eVRUMm0Nu3y9OUcEiURageUlU3jJ/OIMW\ngoMghMn1k5vsSkr00IBb5JsdW7/RP8MzafxBqIZeF0juhB6QnCJyKUNdDRJa\nAtYzmqoQVjU7Scfrdi+UHk+fWXjp2xomhEFwGQb3s/RT3BlRuD5siHsaD++v\npmwZKHuF30F6CDfkBBk3kN3Y88oCQgoxbXSOq4/nKSDTVBe/dJEipI+w2l+T\n1L/MFnU6HQ3zCowxttA8bwUAysrOi7PIIhsdOenmLnyNlPF/wRgpiPv24f32\nmmujaIlPb+2BZehLCT0PL3nrloPjAOFjCasCkwKEK20TsSCDBRdK79U1P7Mc\nAwCX\r\n=yklH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvkK+4OiFvpltLRPevi3Pm9vTJn8AUo8vEm3fOy0KzoAiEAgWQaKwWjZRBT35f9HzHXaeVAUPhn20qgNPLOPrWihAM="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.56_1591189004671_0.5610529563782569"},"_hasShrinkwrap":false},"1.0.0-beta.57":{"name":"@rax-ui/filter","version":"1.0.0-beta.57","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.57","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"3bb6e1e1c895bdacff111e682d5c354bdea0e7ea","_id":"@rax-ui/filter@1.0.0-beta.57","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kRpgrGsbDuv7geIZsAJGXb4APC/Hwf7tGgoShKmXswQQjixVWKWL23iGEBfvGDeH0Vt/6NA2GYewIK9IukVKLw==","shasum":"70d77e840dc1e304533387363014c778b5943d74","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.57.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8CIlCRA9TVsSAnZWagAArBcP/34jBcdnL2xFeaY3MWb4\nNR7+QPcOkOs6T/d3i6WqGeKFAFGF/tjGId38d8RYJ9Rr2Xp5nVXVALBhqz/H\nxpJeL7uw5ogEL2UULVMnhlfD4pmeC66/nokYhYMaU1PEBhKIkJ84GA/mRf2D\nfI2PUNlDYqy9E0p1mwZSAHPbJRfQi6w5GobTEGyzPWJEJpVpqWsm7wqj2qnz\n/TxH2tBAbCdE5oeLSXHUqhiO/G2ync1CWggXnsr0LSsvTOHkLcFmYbm96P4I\n9MAdB8/rgnuEPtFwLKvZI5AQFiRtYlSaEhW6QMX3zeH/EKxLqECqD8JaxzEB\nZyG+gtVBG1V7QuWMdBZ1aQT2Kfq2v6vAGd0S5jLl4vY/dBBxHPkutapzVRod\nbEIIlg9lNdw3y9XUu4R2HDjBMSYpdmBth7bkDowibVSDdGwA6c9Q90AgA3OE\ntHtjb3+tuv+p0vS+LH7T+lwelX0dyLL/4mPXV76NecyJjXUpnQuYvEff3b4+\nuiDc3UWA84W73d/8/1bcsBfozdZBBvF5I/uedqJF/CCafGdWQuUK67PZtxUb\n2zlG6RtPM5xBXx4QLD3GkFFkiUqHrhmO4E0DyuDJdXaHPChIRo/9n33+K7OX\neK8nd7X1Nk76I1SDykuYYeJXal5unh5JY2iAfHA8xLVhfZrw050S33afQFZj\nCMp6\r\n=PKTV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCF3W+3JyyC9EUfo8uoOLql5uvON7VBHhrLtZ/D3fXZ0gIgSAj3bFByQWL+XlLY4yRmFjsVGKBrL19htRWck44u0qw="}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.57_1592795684875_0.6849105293471254"},"_hasShrinkwrap":false},"1.0.0-beta.59":{"name":"@rax-ui/filter","version":"1.0.0-beta.59","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.59","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"60baefd535eb4ca3046f427d9db61db180b46b24","_id":"@rax-ui/filter@1.0.0-beta.59","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-G1t8WuztODtO8ISixvIoTs/qH0Ct5iXhHalFjYDGMMVrCCwoEGJsB2+p1M5IQKiMKz5h8s5ZcUpvXpk9cKz27g==","shasum":"ff8e8fc32682656c3841dba6d76cb17a06b4d279","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.59.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9cLCRA9TVsSAnZWagAAH2YP/0Fnhw1on1nKqR38siZU\n4uiu3j9weh3ocqEfqcKyyISxKRIYWiRdt5tVnBSP87EU7HPeTsK2U1m3kmyl\nRhEGNkMWVUIF6vSYCCmrRekSXxFF0kiVfPygTzPpkL51QgohXOtL20OldjAH\n1sx/fO8Tia0cRRXrzNo8kMy6YBuYyDmJBjnN+Tb7K8T5XCLITp4oygAnI0wx\nGisF5brHev2xIMpm5fBDTnSR0AFvWKHoo2u4+xmt3JqsY8nFQr7WFVf+J1tz\nVBeFsyDKDButQcAv2BifjBjuVVuFWloSNxNY37/M3z4/ewyKHx9lqnTUBTDJ\n5SQBA3Fk7Yb/O7Nn6qu/EXen/cuYb/QXDaJyz6hUqEUCmd6LE+U+EdlVB2nQ\n8FFnoHEX1G3CZUjDBawGSt2dNvNxysprgJ2+l5f/a7i/4cs7E8r+i6yVsJvx\ngZEetvRvNnTfKs105rrC+IK+WOWoNJE16EjWsInmgGMuNugHRCrXfMHYxhBY\nefmoEclFM9VjgwLGmUY7miJHbPFGRC4PsA0k5zrN6hnPOVw+Wl1CewoGaPRu\npAnQEqkNHcuydh4ReDxTh+RztmXlxEb4qQdxaVhRI0IdH39MySJpk7B5ps4/\nCXh+WyMsYs8xB3B34PvULdi6Cn73WbdarF0tnFgZNKk/jESf/QM2woBMdwru\nIdgO\r\n=0PxB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ0CwfoCs+3wiTsj+/Mu/vFotIZzt+jkFZNjhfRjkAPQIhALlPq9Yr/qZ9wQAqUBOCkPKE/rWVKrQXRXXB3CmO7JUc"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.59_1597757194876_0.5850464805094435"},"_hasShrinkwrap":false},"1.0.0-beta.60":{"name":"@rax-ui/filter","version":"1.0.0-beta.60","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.60","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"2820c60edd90fddf1d897680c65c4f51b548a6f6","_id":"@rax-ui/filter@1.0.0-beta.60","_nodeVersion":"13.12.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sUixkDpAkgAZhUZ5GPQasMSM+hZ04lrcD5z12hdPwDtIc6OxgUk6xwhv+mysiwqxNdZNk2A0E+cJ1Z2PVoxv4w==","shasum":"14ef3c5adc5075111011d13e3587c28eff5520e0","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.60.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSHZoCRA9TVsSAnZWagAAjcsP+QDodNXUa74tKY2cg2Jz\n18jZn9dWVg/kEokXMiZaTI6g73TUJxcm3mVIXRmSC3VvjShhnmuLbIf93/GZ\nrgdB3Qq+Or6R22+kWTvCQ96qEDt/Oyv+Od8WA5bWfYaYRQrBCGEdvQ4okJbr\ndHVN3k6aGigrX5h3Qc9g9+fZQxREbRlcZknV53ON29N1Bemck74bj0UXQ3JK\ngCH1z6tLBr81td8PLqtvl56/1YHwvYJL4xuLp8VGl7DKT1wTdIKoeLXtdagw\n8epnJYrRajz93jTTHFm/oBE++yc5ccfoQx2z8u7MgptNKoM3OfzEPhKS6kDb\nV6gNfa401GHTMuDLb/V73YKWjjr7coMzvtvBlbBxv+sMfesUciNcz579nmb1\nztXz3J/1PvYg6kT4fEGXJb0EA6ZAu3NCRnLSPkupf5i7mQ4LoVFa0cpAD9pg\nvRsjCK0M27ZuWM1+LYCwZIPpcRRWu1ObC+lVQWsOjuyXO1NpX04/nk3O9qfG\nXGSIDtmBJ8SmcCx9NJafIG6X9u/qh8E5qQYgk5T2dOd4b5Pa8ZYsXnu0b3dQ\nxFQQosSoOygWx+MxT7O/szOAIuM50Sb3kI9+Qk3tzUkSinpAj/7Lcn2FYnfn\nUdjPtnVowgzDSP0SUGbGfwo3IGo6rh761/hfiby9ctc98wewcPmOFb944SRh\nSzTB\r\n=4qSZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjklhrNAb29vb90EPOThMKKhE/aszusDgW7OrDlM85qgIhALH71H/bM7F3NzijszpQivN31cBtz4f/PPnQOEGCWBXI"}]},"maintainers":[{"email":"amdgigabyte@gmail.com","name":"amdgigabyte"},{"email":"lianmin.slm@qq.com","name":"lianmin"},{"email":"myronliu347@gmail.com","name":"myronliu347"}],"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.60_1598584424203_0.32599761153085116"},"_hasShrinkwrap":false},"1.0.0-beta.62":{"name":"@rax-ui/filter","version":"1.0.0-beta.62","description":"--- display: @rax-ui/filter family: other ---","author":{"name":"beizhu.wc@alibaba-inc.com"},"main":"lib/index.js","types":"lib/index.d.ts","keywords":["Rax","rax-component"],"engines":{"npm":">=3.0.0"},"dependencies":{"@rax-ui/styles":"^1.0.0-beta.62","rax-clone-element":"1.x.x","rax-find-dom-node":"^1.0.1","rax-image":"^2.1.0","rax-recyclerview":"1.x.x","rax-set-native-props":"1.x.x","rax-text":"^1.2.0","rax-view":"^1.1.0","universal-env":"3.1.0","universal-transition":"1.0.0"},"peerDependencies":{"rax":"^1.0.0"},"gitHead":"7a37057a5666b49ac4a5e8dc8cd025a404bbf514","_id":"@rax-ui/filter@1.0.0-beta.62","_nodeVersion":"13.12.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-i65r56WO8PvTAkj6ZCW+Qgz0Cxfsqlepoj2Dv2oNtt6Q9R4WiyNoRgEf2MMfAPzz2YXDsWNyTsrfM8pCP39lSg==","shasum":"3b1dbfb28b1f8e35e1eb5dd86b67c734de67af4a","tarball":"https://registry.npmjs.org/@rax-ui/filter/-/filter-1.0.0-beta.62.tgz","fileCount":35,"unpackedSize":98000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvMnYCRA9TVsSAnZWagAADXIP/3wcd5RXyAhBbivdYgna\nejSItk7v72n/KovzvPBOynol7l/n0LkVH1zxlru0H3AKIxTB4f5/GjR+E4ch\nl5z1RtAYodrdvLcfy5e0asW7RXDn5mY3XBukjIFNtOHA658hZjkTlcx8Homy\nV+QaRg9rke7n7mtTCtpq41GrzQvlwqreEgKd/MOgCPU/kw8PtjPFz1hSJrEp\nbJ+mIYetxfMG9vNvQroU+BxkytPLYkJispN2qeF0BALi7Jax34h96rj2vfUa\nGw6b95ggHS5XG5ahX5MGpBhwcAh3WDXdNMUNXvrtJVckbH68Rt1W1vxrOQfy\neOqgkC/Kr194mWyfztZeEnetv3oYKdT/Aip28tXvQRlKDC8w3ruWvMbFx2ty\ns6FuMflPwnTEloKRQ2gkys1HtL9q5xQDlgH/qWXnn9bzXThj0n4Y/fjwNIH2\n4cChOYasEVm5YrXaqRuEBlA375mE75/NTZvGDqIW2OSak4ybg0cgv2uaVppj\n7iL0SELG2cWhDIOgAXuaPH+6NI900X8ldGHf69fwiSEp8fjPkonl4v9Ncg46\nz2xReGAQT6CuYZsncwRcJq6AU0dXhkgZ2nXcsu4/9YKpjgIGhFW9SXTN2Bii\nyuCFaqKS0ppxPfIuVYiGfnWJSV/6sgmDPTEAjpdnXmmROx4bqfw97SJhhkhN\n0Qip\r\n=MEIe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAEPh4uJPQjEO0rrmAYAOGD0jbsFv7uHADoT9V04Bx1xAiA03dnQUZz5X9Fy4fFFg9er0V/ggFuO11x1k4CS9Q9VPQ=="}]},"_npmUser":{"name":"lianmin","email":"lianmin.slm@qq.com"},"directories":{},"maintainers":[{"name":"lianmin","email":"lianmin.slm@qq.com"},{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filter_1.0.0-beta.62_1606207960375_0.3156667283446528"},"_hasShrinkwrap":false}},"time":{"created":"2019-08-16T11:10:52.318Z","1.0.0-beta.0":"2019-08-16T11:10:52.679Z","modified":"2022-04-06T18:11:06.617Z","1.0.0-beta.1":"2019-08-21T03:40:47.212Z","1.0.0-beta.2":"2019-08-21T12:22:35.327Z","1.0.0-beta.3":"2019-08-30T11:38:17.483Z","1.0.0-beta.9":"2019-10-08T09:53:23.183Z","1.0.0-beta.10":"2019-10-09T08:53:33.614Z","1.0.0-beta.15":"2019-11-27T04:35:18.793Z","1.0.0-beta.32":"2020-02-25T11:33:50.488Z","1.0.0-beta.35":"2020-03-16T15:16:02.597Z","1.0.0-beta.36":"2020-03-19T12:04:14.270Z","1.0.0-beta.37":"2020-03-23T13:54:46.849Z","1.0.0-beta.38":"2020-03-26T12:35:52.009Z","1.0.0-beta.39":"2020-03-26T13:00:06.663Z","1.0.0-beta.40":"2020-04-02T12:30:33.986Z","1.0.0-beta.41":"2020-04-14T12:50:03.785Z","1.0.0-beta.42":"2020-04-14T13:33:44.475Z","1.0.0-beta.43":"2020-04-15T03:13:09.351Z","1.0.0-beta.45":"2020-04-15T06:49:57.042Z","1.0.0-beta.46":"2020-04-15T12:54:44.228Z","1.0.0-beta.47":"2020-04-17T07:10:45.414Z","1.0.0-beta.48":"2020-04-23T11:44:53.211Z","1.0.0-beta.49":"2020-04-23T12:38:11.827Z","1.0.0-beta.50":"2020-04-27T12:16:37.148Z","1.0.0-beta.51":"2020-04-29T08:10:28.599Z","1.0.0-beta.52":"2020-05-11T07:11:32.240Z","1.0.0-beta.53":"2020-05-12T09:06:36.852Z","1.0.0-beta.54":"2020-05-13T06:07:29.238Z","1.0.0-beta.55":"2020-05-26T09:53:36.876Z","1.0.0-beta.56":"2020-06-03T12:56:44.812Z","1.0.0-beta.57":"2020-06-22T03:14:45.030Z","1.0.0-beta.59":"2020-08-18T13:26:34.983Z","1.0.0-beta.60":"2020-08-28T03:13:44.349Z","1.0.0-beta.62":"2020-11-24T08:52:40.494Z"},"maintainers":[{"name":"lianmin","email":"lianmin.slm@qq.com"},{"name":"amdgigabyte","email":"amdgigabyte@gmail.com"},{"name":"myronliu347","email":"myronliu347@gmail.com"}],"description":"--- display: @rax-ui/filter family: other ---","keywords":["Rax","rax-component"],"author":{"name":"beizhu.wc@alibaba-inc.com"},"readme":"---\ndisplay: @rax-ui/filter\nfamily: other\n---\n\n## @rax-ui/filter \n\n`@rax-ui/filter` 在搜索筛选场景中使用。Filter 是一个重业务属性组件，我们封装了业务中通用的交互和设计，提供了灵活的配置来做自定义，扩展性强，并制定了业务组件的书写规范，设计上解耦 `业务组件`。\n\n### 组件功能点\n\n- 1、搜索筛选组件包含 `Filter` 和 `Filter.Panel` 组件，设计上解耦 `业务组件`，须遵守<a href=\"#panelspec\">业务组件书写规范</a>\n- 2、<a href=\"#navconfig\">筛选头配置</a>提供了三种筛选类型，并且支持点击动画\n  + `RelatePanel`：筛选项关联Panel型（即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel）\n\t+ `QuickSearch`：筛选项快速搜索排序型（即筛选头没有对应 Panel，点击筛选头直接触发搜索）\n\t+ `Custom`：自定义类型，UI完全自定义\n- 3、`Filter.Panel` 管理面板的显示隐藏，支持可配置的下拉、左滑动画\n- 4、提供两种业务面板组件（如不满足业务需求，可自行封装业务组件，<a href=\"#panelspec\">查看业务组件书写规范</a>）\n  + `@rax-ui/filter-list-select`，列表选择面板组件\n  + `@rax-ui/filter-multi-select`，多选面板组件\n  + `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n- 5、提供了 `@rax-ui/filter-helper` 工具组件（Filter滚动吸附场景使用）\n\n\n### 动效图\n\n![动效图](https://img.alicdn.com/tfs/TB10fWJioT1gK0jSZFrXXcNCXXa-282-500.gif)\n  \n### 架构图\n\n<img src=\"https://img.alicdn.com/tfs/TB1QjQifuH2gK0jSZJnXXaT1FXa-1085-795.png_600x600.jpg\">\n\n\n## 安装方法\n在命令行中执行以下命令\n```\nnpm install @rax-ui/filter -S\n```\n\n## 使用方式\n```\nimport Filter from '@rax-ui/filter';\nimport ListSelect from '@rax-ui/filter-list-select';\n\nrender(\n  <Filter navConfig={} onChange={}>\n\t\t<Filter.Panel>\n      <ListSelect {...props} />\n\t\t</Filter.Panel>\n\t\t<Filter.Panel>\n      <其他业务组件 />\n\t\t</Filter.Panel>\n  </Filter>\n)\n```\n\n##  API \n### Filter Props\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| navConfig     | 筛选头配置 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1FlZGfrj1gK0jSZFOXXc7GpXa-750-215.png_400x400.jpg)     | Array&lt;Object&gt;    | - (必填)   |\n| offsetTop     | Filter组件展开面板状态下距离页面顶部的高度，有两种状态：**固定位置**和**跟随页面滚动吸附置顶**<br /><br /> **固定位置：**状态下距离页面顶部的高度<br /> **跟随页面滚动吸附置顶：**状态下距离页面顶部的高度 <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1l13Cfrr1gK0jSZFDXXb9yVXa-750-215.png_400x400.jpg)    | Number     | -(必填)    |\n| styles     | 配置样式，Filter中所有样式都可使用`styles`集合对象来配置覆盖，详见CSS API   | Object     | {}    | \n| clickMaskClosable     | 开启 mask 背景的点击隐藏    | Boolean     | true     |\n| onPanelVisibleChange     | Panel 显示隐藏回调函数 <br /> **签名：** `Function({ visible:Boolean, triggerIndex:Number, triggerType:String }) => void` <br /> **参数：** <br /> `visible:Boolean` 显示隐藏标志量 <br /> `triggerIndex:Number`触发的筛选项索引值 <br />`triggerType:String` 触发类型 <br />  <br /><br />**triggerType详解** 包含三种触发类型<br />`Navbar`:来自筛选头的点击触发<br />`Mask`:来自背景层的点击触发<br />`Panel`:来自Panel 的 onChange 回调触发  | Function     |      | \n| onChange     | Filter 搜索变更回调函数 <br /> **签名：** `Function(params:Object, urlQuery: Object) => void`  <br /> **参数：** <br />`params: Object` 标准化搜索参数，必须包含`{filterKey, filterText, filterValue, filterValueChanged}` <br /> ![undefined](https://img.alicdn.com/tfs/TB1DohqnNv1gK0jSZFFXXb0sXXa-291-110.png) <br />`urlQuery:Object` URL query 对象<br />|  Function | | \n\n#### Filter 组件 `props.navConfig` 数组配置详解\n#### navConfig\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）\n| -------- | -------- | -------- | -------- | \n| type     |  筛选项类型 <br /><br /> **三种类型**<br/>`RelatePanel`: 【默认类型】筛选项关联Panel型，即筛选头和 Panel 是一对一关系，点击筛选头展示 Panel<br/>`QuickSearch`: 筛选项快速搜索排序型，即筛选头没有对应 Panel，点击筛选头直接触发搜索<br/>`Custom`: 自定义类型，UI完全自定义，通过 `renderItem`函数返回 JSX    | String     | 'RelatePanel'   |\n| text <br /><br /><br /> **注意**  `RelatePanel`类型生效    |  筛选头显示文案 <br /> 文字溢出用`...`展示  | String     | - (必填) |\n| icon <br /><br /><br /> **注意**  `RelatePanel`类型生效    | 筛选头 icon：normal 正常态 和 active 激活态 图标 <br /> **数据格式**   <br /> `Object`类型 :<br /> ![undefined](https://img.alicdn.com/tfs/TB1w6tnnNz1gK0jSZSgXXavwpXa-192-81.png)   <br /> `String`类型 : <br />![undefined](https://img.alicdn.com/tfs/TB1sHdtnRr0gK0jSZFnXXbRRXXa-153-45.png) <br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1jdgFfuP2gK0jSZFoXXauIVXa-750-215.png_400x400.jpg)  | Object or String     | - | \n| options <br /><br /><br /> **注意**  `QuickSearch`类型生效    |  快速搜索排序类型的数据源  <br />**数据格式**<br /> ![undefined](https://img.alicdn.com/tfs/TB1yiXrnUY1gK0jSZFCXXcwqXXa-205-259.png)   | Array     | (必填) |\n| optionsIndex  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  快速搜索排序类型默认选中的索引  | String  | 0 |\n| optionsKey  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  指定快速搜索排序对应的搜索 key,用到 onChange 回调中| String     | 不提供默认使用当前筛选项的索引 |\n| loop  <br /><br /><br /> **注意**  `QuickSearch`类型生效   |  点击是否依托options数组项循环  | Boolean  | true |\n| formatText     | 文案格式化函数<br /> **签名：**`Function(text:String) => text` <br /> **参数：** <br />`text: String` 筛选头文案     | Function     | (text)=>text    |\n| disabled     | 禁用筛选头点击   | Boolean     | true     | \n| highlight     | 是否保持文字图标高亮 <br />  | Boolean     | false     | \n| hasSeperator     | 是否展示右侧分隔符<br /><br />**效果图**<br /> ![undefined](https://img.alicdn.com/tfs/TB1xmZAfAL0gK0jSZFtXXXQCXXa-750-215.png_400x400.jpg)    |  Boolean     |  false     | \n| renderItem     | 自定义渲染<br /> **注意** <br /> 提供的配置项无法满足你的 UI 需求时使用<br /> **签名：**`Function(isActive:Boolean, this:Element) => Element` <br /> **参数：** <br />`isActive:Boolean` 筛选头是否为激活状态<br />`this:Element` 筛选头this实例    | Function     |  -     |\n| animation     | 动画配置，采用内置的动画 <br />**参数说明** <br />![undefined](https://img.alicdn.com/tfs/TB1gX4onRv0gK0jSZKbXXbK2FXa-208-89.png)  <br /> **注意** 目前只内置了一种`rotate`动画类型  |  Object     |      | \n| animationHook     | 用户自定义动画的钩子函数，内置动画无法满足需求时使用 <br /> **签名：**`Function(refImg:Element, isActive:Boolean) => text` <br /> **参数：** <br />`refImg:Element` 筛选头图标的 ref 实例 <br />`isActive:Boolean` 筛选头是否为激活状态  | Function     |   -   | \n\n### Filter.Panel Props\n\n| 参数 | 说明 | 类型 | 默认值（是否必填）|\n| -------- | -------- | -------- | -------- | \n| displayMode     | Panel 展现形式：全屏、下拉 <br />**参数说明** <br />全屏：`Fullscreen`<br />下拉：`Dropdown`  |  String     |  'Dropdown'     | \n| animation     | Panel 展示动画配置，内置上下左右动画 <br />**参数说明**<br />  ![undefined](https://img.alicdn.com/tfs/TB1tEVqnKL2gK0jSZFmXXc7iXXa-211-89.png)  <br /> `direction` 控制动画方向，分别有 `up`、`down`、`left`、`right`  |  Object     |      | \n| highPerformance | 内部通过 Panel 的显示隐藏控制 panel 的 render 次数，避免不必要的 render，高性能模式下，只会在 Panel 展示 或者 展示隐藏状态变化时才会重新 render  | Boolean |true|\n| noAnimation |禁用动画| Boolean|false |\n\n\n### Filter 方法\n\n|名称 | 说明 | 类型 | 默认值 |\n|:---------------|:--------|:----|:----------|\n| reset | 重置内部选中状态 | Function  <br/> **签名：**`Function(navConfig:Array<NavProps>) => Array<any>` <br /> **参数：** <br />`navConfig:Array<NavProps>` 要重置 navConfig 数组 <br/>**返回值：** <br/> `Array<any> 被重置后的搜索参数`  |  |\n| setNavConfig | 修改 navConfig(navConfig 默认是不受控的，必须通过方法来修改) | Function   <br/> **签名：**`Function(fn: (navConfig: Array<NavProps>) => Array<NavProps>) => void` <br /> **参数：** <br />`fn: (navConfig: Array<NavProps>) => Array<NavProps>` 接收新的 navConfig参数的回调函数 |  |\n\n\n## CSS API\n| 名称 | 说明 |\n|:---------------|:--------|\n| `filter` | filter 容器样式 |\n| `filter__nav` | 筛选头容器样式 |\n| `filter__nav__item` | 筛选项样式\n| `filter__nav__item_active` | 筛选项高亮样式 |\n| `filter__nav__text_active` | 筛选项文案高亮样式 |\n| `filter__nav__icon` | 筛选项图标样式 |\n| `filter__nav__seperator` | 筛选项分隔符样式 |\n| `filter__panel` | Panel容器样式 |\n| `filter__panel__mask` | Panel Mask背景样式 |\n\n\n### 业务组件书写规范\n### PanelSpec\n`Filter.Panel` 会注入一些与 filter 相关的 props 到子组件中，详细如下\n#### Inject Props\n- `onChange`：业务组件触发搜索时调用\n\t  + **函数签名**`Function(params:Object,showPanel:Boolean) => void`\n\t  + `params:Object`：标准化搜索参数，必须包含如下字段`{filterKey, filterText, filterValue, filterValueChanged}`\n\t  + `showPanel:Boolean`：默认`fasle`,触发`onChange` 默认会隐藏 Panel，给 `true` 强制展示 \n- `onHidePanel`：业务组件主动隐藏 Panel\n\t  + **函数签名**{`Function() => void`}\n- `panelAttributes`: 和 Filter 相关的属性\n    + `index`{Number}：当前 Panel 索引值\n    + `visible`{Boolean}：当前 Panel 显示隐藏状态\n    + `maxHeight`{Number}：当前业务组件的可展示的最大高度，全屏和下拉模式高度不一样\n    + `displayMode`{String}：当前 Panel 所处的展示模式，下拉 or 全屏\n    + `shouldInitialRender`{Boolean}：控制首次打开页面时业务组件是否要 render（对性能有极致要求时可在业务组件中使用此变量）\n    + `urlQuery`{Object}：URL query 对象\n\n#### 规范列表\n- 【规范1】必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\n- 【规范2】Panel 会默认注入如下 prop 到业务组件中\n- 【规范3】通过 `props.onChange` 触发 Filter 搜索，必须传递标准化搜索参数\n- 【规范4】导出方法 rootRef reset\n\n```\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const MyComp = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n  const rootRef = useRef();\n  function handleChange () {\n    // 【规范3】、通过 `props.onChange`触发 Filter 搜索，必须传递标准化搜索参数\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: 100,\n      filterValueChanged: 100 !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => {} // 重置 panel 内部状态\n  }));\n  return (\n    <View ref={rootRef}></View>\n  )\n});\n```\n\n```\n<!-- 在 Filter 中使用业务面板组件 -->\n<Filter onChange={}>\n  <Filter.Panel>\n    <业务组件 />\n  </Filter.Panel>\n</Filter>\n```\n\n#### 业务组件示例 Demo\n```\nimport { createElement, forwardRef, useState, useRef, useImperativeHandle } from 'rax';\nimport View from 'rax-view';\n\n// 【规范1】、必须要使用 forwardRef 包裹，Filter 需要通过 ref 调用子组件方法\nexport const OrderList = forwardRef((props, ref)=>{\n  // 【规范2】、Panel 会默认注入如下 prop 到业务组件中\n  const {onChange, onHidePanel, panelAttributes} = props;\n  const {maxHeight, shouldInitialRender, index, visible, displayMode, urlQuery} = panelAttributes;\n\n  const list = [0, 1, 2, 3, 4, 5, 6];\n  const [activeIndex, setActiveIndex] = useState(0);\n  const rootRef = useRef();\n\n  function handleClick (index) {\n    setActiveIndex(index);\n    // 【规范3】、触发 Filter 搜索，要求必须传递标准化搜索参数，\n    onChange({ \n      filterKey: 'orderId',\n      filterText: '价格升序',\n      filterValue: list[index],\n      filterValueChanged: list[index] !== 0,\n    });\n  }\n  // 【规范4】、导出如下两个方法 rootRef reset\n  useImperativeHandle(ref, () => ({\n    rootRef: rootRef,   // 导出组件根节点ref, Filter 执行动画要使用\n    reset: () => { // 重置 panel 内部状态\n      setActiveIndex(0);\n    } \n  }));\n  const activeStyle = {};\n  const normalStyle = {};\n  return (\n    <View ref={rootRef}>\n      {list.map((item, index) => {\n        return (\n          <View key={index} style={activeIndex ? activeStyle:normalStyle} onClick={()=>handleClick(index)}>排序项{index}</View>\n        )\n      })}\n    </View>\n  )\n})\n```\n\n#### 提供的通用业务面板组件\n- `@rax-ui/filter-list-select`，列表选择面板组件\n- `@rax-ui/filter-multi-select`，多选面板组件\n- `@rax-ui/filter-combo-container`，组合容器，用于将若干个`@rax-ui/filter-multi-select`组合使用\n\n","readmeFilename":"README.md"}