vxe-pc-ui 4.1.21 → 4.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/es/drawer/style.css +0 -19
  2. package/es/drawer/style.min.css +1 -1
  3. package/es/icon/style.css +1 -1
  4. package/es/modal/style.css +0 -19
  5. package/es/modal/style.min.css +1 -1
  6. package/es/style.css +1 -1
  7. package/es/style.min.css +1 -1
  8. package/es/tabs/src/tabs.js +75 -16
  9. package/es/tabs/style.css +6 -1
  10. package/es/tabs/style.min.css +1 -1
  11. package/es/ui/index.js +3 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-drawer/style.css +0 -19
  14. package/es/vxe-drawer/style.min.css +1 -1
  15. package/es/vxe-modal/style.css +0 -19
  16. package/es/vxe-modal/style.min.css +1 -1
  17. package/es/vxe-tabs/style.css +6 -1
  18. package/es/vxe-tabs/style.min.css +1 -1
  19. package/lib/drawer/style/style.css +0 -19
  20. package/lib/drawer/style/style.min.css +1 -1
  21. package/lib/icon/style/style.css +1 -1
  22. package/lib/icon/style/style.min.css +1 -1
  23. package/lib/index.umd.js +154 -50
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/modal/style/style.css +0 -19
  26. package/lib/modal/style/style.min.css +1 -1
  27. package/lib/style.css +1 -1
  28. package/lib/style.min.css +1 -1
  29. package/lib/tabs/src/tabs.js +95 -15
  30. package/lib/tabs/src/tabs.min.js +1 -1
  31. package/lib/tabs/style/style.css +6 -1
  32. package/lib/tabs/style/style.min.css +1 -1
  33. package/lib/ui/index.js +3 -1
  34. package/lib/ui/index.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/lib/vxe-drawer/style/style.css +0 -19
  38. package/lib/vxe-drawer/style/style.min.css +1 -1
  39. package/lib/vxe-modal/style/style.css +0 -19
  40. package/lib/vxe-modal/style/style.min.css +1 -1
  41. package/lib/vxe-tabs/style/style.css +6 -1
  42. package/lib/vxe-tabs/style/style.min.css +1 -1
  43. package/package.json +2 -2
  44. package/packages/tabs/src/tabs.ts +82 -16
  45. package/packages/ui/index.ts +2 -0
  46. package/styles/components/drawer.scss +0 -18
  47. package/styles/components/modal.scss +0 -18
  48. package/styles/components/tabs.scss +5 -1
  49. package/types/components/table-module/validator.d.ts +2 -3
  50. package/types/components/table.d.ts +4 -1
  51. package/types/components/tabs.d.ts +74 -0
  52. package/types/ui/global-icon.d.ts +2 -0
  53. /package/es/icon/style/{iconfont.1725941866604.ttf → iconfont.1726025998391.ttf} +0 -0
  54. /package/es/icon/style/{iconfont.1725941866604.woff → iconfont.1726025998391.woff} +0 -0
  55. /package/es/icon/style/{iconfont.1725941866604.woff2 → iconfont.1726025998391.woff2} +0 -0
  56. /package/es/{iconfont.1725941866604.ttf → iconfont.1726025998391.ttf} +0 -0
  57. /package/es/{iconfont.1725941866604.woff → iconfont.1726025998391.woff} +0 -0
  58. /package/es/{iconfont.1725941866604.woff2 → iconfont.1726025998391.woff2} +0 -0
  59. /package/lib/icon/style/{iconfont.1725941866604.ttf → iconfont.1726025998391.ttf} +0 -0
  60. /package/lib/icon/style/{iconfont.1725941866604.woff → iconfont.1726025998391.woff} +0 -0
  61. /package/lib/icon/style/{iconfont.1725941866604.woff2 → iconfont.1726025998391.woff2} +0 -0
  62. /package/lib/{iconfont.1725941866604.ttf → iconfont.1726025998391.ttf} +0 -0
  63. /package/lib/{iconfont.1725941866604.woff → iconfont.1726025998391.woff} +0 -0
  64. /package/lib/{iconfont.1725941866604.woff2 → iconfont.1726025998391.woff2} +0 -0
@@ -1 +1 @@
1
- .vxe-tabs{display:flex;flex-direction:column;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-tabs.is--padding .vxe-tabs-pane--item{padding:var(--vxe-ui-layout-padding-default)}.vxe-tabs.trigger--default .vxe-tabs-header--item{cursor:pointer}.vxe-tabs.trigger--default .vxe-tabs-header--item:hover .vxe-tabs-header--item-name{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header{display:flex;flex-direction:row}.vxe-tabs-header--bar{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;width:2em;border:1px solid var(--vxe-ui-input-border-color);cursor:pointer}.vxe-tabs-header--bar::after{content:"";position:absolute;top:0;width:1px;height:100%;background-color:var(--vxe-ui-input-border-color);z-index:3}.vxe-tabs-header--bar:focus{color:var(--vxe-ui-font-darken-color)}.vxe-tabs-header--bar:hover{color:var(--vxe-ui-font-primary-lighten-color);background-color:var(--vxe-ui-font-tinge-color)}.vxe-tabs-header--bar:active{color:var(--vxe-ui-font-primary-darken-color)}.vxe-tabs-header--left-bar{border-right:0;box-shadow:8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--left-bar::after{right:-1px}.vxe-tabs-header--right-bar{border-left:0;box-shadow:-8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--right-bar::after{left:-1px}.vxe-tabs-header--extra{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;border-bottom:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs-header--wrapper{position:relative;flex-grow:1}.vxe-tabs-header--wrapper::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:var(--vxe-ui-input-border-color);z-index:0}.vxe-tabs-header--item-wrapper{position:relative;display:flex;flex-direction:row;overflow-y:hidden;overflow-x:auto;outline:0}.vxe-tabs-header--item{position:relative;flex-shrink:0;padding:0 .5em}.vxe-tabs-header--item.is--active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--item.align--left{text-align:left}.vxe-tabs-header--item.align--center{text-align:center}.vxe-tabs-header--item.align--right{text-align:right}.vxe-tabs-header--item-inner{display:flex;flex-direction:row;align-items:center}.vxe-tabs-header--item-content{flex-grow:1}.vxe-tabs-header--item-icon{padding:0 .6em}.vxe-tabs-header--item-icon+.vxe-tabs-header--item-name{padding-left:0}.vxe-tabs-header--item-name{padding:0 .6em}.vxe-tabs-header--close-btn{font-size:.8em;border-radius:50%;width:1.5em;height:1.5em;line-height:1.5em;text-align:center}.vxe-tabs-header--close-btn:hover{color:var(--vxe-ui-font-color);background:var(--vxe-ui-tabs-close-hover-background-color)}.vxe-tabs-header--close-btn:active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--close-btn>i{font-size:1em}.vxe-tabs-header--item-inner{transition:color .1s ease-in-out}.vxe-tabs-pane{flex-grow:1;overflow:hidden}.vxe-tabs-pane--item{display:none;height:100%;overflow:auto;outline:0}.vxe-tabs-pane--item.is--visible{display:block}.vxe-tabs-header--active-line{display:none}.vxe-tabs-header--active-line.type--default{display:block;position:absolute;bottom:0;left:0;height:2px;width:4px;background-color:var(--vxe-ui-font-primary-color);z-index:2;transition:all .3s ease-in-out}.vxe-tabs-header--active-line.type--card{display:block;position:absolute;top:0;left:0;width:4px;border:1px solid var(--vxe-ui-font-primary-color);pointer-events:none;z-index:1;box-shadow:0 0 8px rgba(0,0,0,.1);transition:color,left .3s ease-in-out}.vxe-tabs-header--active-line.type--border-card{display:block;position:absolute;top:0;left:0;width:4px;border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);pointer-events:none;z-index:1}.vxe-tabs--border-card,.vxe-tabs--card,.vxe-tabs--default,.vxe-tabs--round-card{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--default .vxe-tabs-header--item-inner{border-bottom:2px solid transparent}.vxe-tabs--card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--card .vxe-tabs-header{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--card .vxe-tabs-header--item{border-left:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header--item:first-child{border-left:0}.vxe-tabs--card .vxe-tabs-header--item:last-child{border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--border-card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--border-card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--border-card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--border-card.is--height .vxe-tabs-pane--item,.vxe-tabs--border-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header{border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);background-color:var(--vxe-ui-tabs-card-header-background-color)}.vxe-tabs--border-card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--border-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--round-card .vxe-tabs-header--item{position:relative;z-index:2;margin:0 2px;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:rgba(0,0,0,.02);transition:color .3s ease-in-out}.vxe-tabs--round-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item:first-child{margin-left:0}.vxe-tabs--round-card .vxe-tabs-header--item:last-child{margin-right:0}.vxe-tabs--round-card.is--height .vxe-tabs-pane--item,.vxe-tabs--round-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs .vxe-tabs-header--wrapper{height:var(--vxe-ui-tabs-header-height-default);overflow:hidden}.vxe-tabs .vxe-tabs-header--item-inner{height:var(--vxe-ui-tabs-header-height-default)}.vxe-tabs .vxe-tabs-header--active-line.type--card{height:calc(var(--vxe-ui-tabs-header-height-default) - 1px)}.vxe-tabs .vxe-tabs-header--active-line.type--border-card{height:calc(var(--vxe-ui-tabs-header-height-default) + 1px);line-height:calc(var(--vxe-ui-tabs-header-height-default) + 1px)}
1
+ .vxe-tabs{display:flex;flex-direction:column;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-tabs.is--padding .vxe-tabs-pane--item{padding:var(--vxe-ui-layout-padding-default)}.vxe-tabs.trigger--default .vxe-tabs-header--item{cursor:pointer}.vxe-tabs.trigger--default .vxe-tabs-header--item:hover .vxe-tabs-header--item-name{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header{display:flex;flex-direction:row}.vxe-tabs-header--bar{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;width:2em;border:1px solid var(--vxe-ui-input-border-color);cursor:pointer}.vxe-tabs-header--bar::after{content:"";position:absolute;top:0;width:1px;height:100%;background-color:var(--vxe-ui-input-border-color);z-index:3}.vxe-tabs-header--bar:focus{color:var(--vxe-ui-font-darken-color)}.vxe-tabs-header--bar:hover{color:var(--vxe-ui-font-primary-lighten-color);background-color:var(--vxe-ui-font-tinge-color)}.vxe-tabs-header--bar:active{color:var(--vxe-ui-font-primary-darken-color)}.vxe-tabs-header--left-bar{border-right:0;box-shadow:8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--left-bar::after{right:-1px}.vxe-tabs-header--right-bar{border-left:0;box-shadow:-8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--right-bar::after{left:-1px}.vxe-tabs-header--extra{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;border-bottom:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs-header--wrapper{position:relative;flex-grow:1}.vxe-tabs-header--wrapper::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:var(--vxe-ui-input-border-color);z-index:0}.vxe-tabs-header--item-wrapper{position:relative;display:flex;flex-direction:row;overflow-y:hidden;overflow-x:auto;outline:0}.vxe-tabs-header--item{position:relative;flex-shrink:0;padding:0 .5em}.vxe-tabs-header--item.is--active .vxe-tabs-header--item-content{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--item.align--left{text-align:left}.vxe-tabs-header--item.align--center{text-align:center}.vxe-tabs-header--item.align--right{text-align:right}.vxe-tabs-header--item-inner{display:flex;flex-direction:row;align-items:center}.vxe-tabs-header--item-content{flex-grow:1}.vxe-tabs-header--item-icon{padding:0 .6em}.vxe-tabs-header--item-icon+.vxe-tabs-header--item-name{padding-left:0}.vxe-tabs-header--item-name{padding:0 .6em}.vxe-tabs-header--close-btn,.vxe-tabs-header--refresh-btn{font-size:.8em;border-radius:50%;width:1.5em;height:1.5em;margin:0 .2em;line-height:1.5em;text-align:center}.vxe-tabs-header--close-btn:hover,.vxe-tabs-header--refresh-btn:hover{color:var(--vxe-ui-font-color);background:var(--vxe-ui-tabs-close-hover-background-color)}.vxe-tabs-header--close-btn:active,.vxe-tabs-header--refresh-btn:active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--close-btn>i,.vxe-tabs-header--refresh-btn>i{font-size:1em}.vxe-tabs-header--item-inner{transition:color .1s ease-in-out}.vxe-tabs-pane{flex-grow:1;overflow:hidden}.vxe-tabs-pane--item{display:none;height:100%;overflow:auto;outline:0}.vxe-tabs-pane--item.is--visible{display:block}.vxe-tabs-header--active-line{display:none}.vxe-tabs-header--active-line.type--default{display:block;position:absolute;bottom:0;left:0;height:2px;width:4px;background-color:var(--vxe-ui-font-primary-color);z-index:2;transition:all .3s ease-in-out}.vxe-tabs-header--active-line.type--card{display:block;position:absolute;top:0;left:0;width:4px;border:1px solid var(--vxe-ui-font-primary-color);pointer-events:none;z-index:1;box-shadow:0 0 8px rgba(0,0,0,.1);transition:color,left .3s ease-in-out}.vxe-tabs-header--active-line.type--border-card{display:block;position:absolute;top:0;left:0;width:4px;border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);pointer-events:none;z-index:1}.vxe-tabs--border-card,.vxe-tabs--card,.vxe-tabs--default,.vxe-tabs--round-card{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--default .vxe-tabs-header--item-inner{border-bottom:2px solid transparent}.vxe-tabs--card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--card .vxe-tabs-header{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--card .vxe-tabs-header--item{border-left:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header--item:first-child{border-left:0}.vxe-tabs--card .vxe-tabs-header--item:last-child{border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--border-card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--border-card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--border-card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--border-card.is--height .vxe-tabs-pane--item,.vxe-tabs--border-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header{border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);background-color:var(--vxe-ui-tabs-card-header-background-color)}.vxe-tabs--border-card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--border-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--round-card .vxe-tabs-header--item{position:relative;z-index:2;margin:0 2px;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:rgba(0,0,0,.02);transition:color .3s ease-in-out}.vxe-tabs--round-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item:first-child{margin-left:0}.vxe-tabs--round-card .vxe-tabs-header--item:last-child{margin-right:0}.vxe-tabs--round-card.is--height .vxe-tabs-pane--item,.vxe-tabs--round-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs .vxe-tabs-header--wrapper{height:var(--vxe-ui-tabs-header-height-default);overflow:hidden}.vxe-tabs .vxe-tabs-header--item-inner{height:var(--vxe-ui-tabs-header-height-default)}.vxe-tabs .vxe-tabs-header--active-line.type--card{height:calc(var(--vxe-ui-tabs-header-height-default) - 1px)}.vxe-tabs .vxe-tabs-header--active-line.type--border-card{height:calc(var(--vxe-ui-tabs-header-height-default) + 1px);line-height:calc(var(--vxe-ui-tabs-header-height-default) + 1px)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-pc-ui",
3
- "version": "4.1.21",
3
+ "version": "4.1.23",
4
4
  "description": "A vue based PC component library",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -25,7 +25,7 @@
25
25
  "style": "lib/style.css",
26
26
  "typings": "types/index.d.ts",
27
27
  "dependencies": {
28
- "@vxe-ui/core": "^4.0.9"
28
+ "@vxe-ui/core": "^4.0.10"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@typescript-eslint/eslint-plugin": "^6.21.0",
@@ -2,7 +2,8 @@ import { defineComponent, ref, h, reactive, inject, PropType, provide, computed,
2
2
  import { createEvent, getConfig, getIcon, globalEvents, permission } from '../../ui'
3
3
  import { getSlotVNs } from '../../ui/src/vn'
4
4
  import { toCssUnit } from '../..//ui/src/dom'
5
- import { warnLog } from '../../ui/src/log'
5
+ import { isEnableConf } from '../..//ui/src/utils'
6
+ import { warnLog, errLog } from '../../ui/src/log'
6
7
  import XEUtils from 'xe-utils'
7
8
 
8
9
  import type { VxeTabsPropTypes, VxeTabPaneProps, VxeTabsEmits, TabsInternalData, TabsReactData, TabsPrivateRef, VxeTabsPrivateComputed, VxeTabsConstructor, VxeTabsPrivateMethods, VxeTabPaneDefines, ValueOf, TabsMethods, TabsPrivateMethods } from '../../../types'
@@ -24,6 +25,9 @@ export default defineComponent({
24
25
  },
25
26
  trigger: String as PropType<VxeTabsPropTypes.Trigger>,
26
27
  beforeChangeMethod: Function as PropType<VxeTabsPropTypes.BeforeChangeMethod>,
28
+ closeConfig: Object as PropType<VxeTabsPropTypes.CloseConfig>,
29
+ refreshConfig: Object as PropType<VxeTabsPropTypes.RefreshConfig>,
30
+ // 已废弃
27
31
  beforeCloseMethod: Function as PropType<VxeTabsPropTypes.BeforeCloseMethod>
28
32
  },
29
33
  emits: [
@@ -52,7 +56,8 @@ export default defineComponent({
52
56
  lintLeft: 0,
53
57
  lintWidth: 0,
54
58
  isTabOver: false,
55
- resizeFlag: 1
59
+ resizeFlag: 1,
60
+ cacheTabMaps: {}
56
61
  })
57
62
 
58
63
  const internalData: TabsInternalData = {
@@ -63,6 +68,14 @@ export default defineComponent({
63
68
  refElem
64
69
  }
65
70
 
71
+ const computeCloseOpts = computed(() => {
72
+ return Object.assign({}, getConfig().tabs.closeConfig, props.closeConfig)
73
+ })
74
+
75
+ const computeRefreshOpts = computed(() => {
76
+ return Object.assign({}, getConfig().tabs.refreshConfig, props.refreshConfig)
77
+ })
78
+
66
79
  const computeTabOptions = computed(() => {
67
80
  const { options } = props
68
81
  return (options || []).filter((item) => handleFilterTab(item))
@@ -161,15 +174,24 @@ export default defineComponent({
161
174
 
162
175
  const initDefaultName = (list?: VxeTabsPropTypes.Options | VxeTabPaneDefines.TabConfig[]) => {
163
176
  let activeName: VxeTabsPropTypes.ModelValue = null
177
+ const nameMaps: Record<string, {
178
+ loading: boolean
179
+ }> = {}
164
180
  if (list && list.length) {
165
181
  let validVal = false
166
182
  activeName = props.modelValue
167
183
  list.forEach((item) => {
168
- if (activeName === item.name) {
169
- validVal = true
170
- }
171
- if (item && item.preload) {
172
- addInitName(item.name, null)
184
+ const { name, preload } = item || {}
185
+ if (name) {
186
+ nameMaps[name] = {
187
+ loading: false
188
+ }
189
+ if (activeName === name) {
190
+ validVal = true
191
+ }
192
+ if (preload) {
193
+ addInitName(name, null)
194
+ }
173
195
  }
174
196
  })
175
197
  if (!validVal) {
@@ -179,6 +201,7 @@ export default defineComponent({
179
201
  }
180
202
  }
181
203
  reactData.activeName = activeName
204
+ reactData.cacheTabMaps = nameMaps
182
205
  }
183
206
 
184
207
  const clickEvent = (evnt: KeyboardEvent, item: VxeTabPaneProps | VxeTabPaneDefines.TabConfig) => {
@@ -196,10 +219,31 @@ export default defineComponent({
196
219
  dispatchEvent('tab-click', { name }, evnt)
197
220
  addInitName(name, evnt)
198
221
  if (name !== activeName) {
199
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name })) {
200
- dispatchEvent('change', { value, name, oldName: activeName, newName: name }, evnt)
222
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })) {
223
+ dispatchEvent('change', { value, name, oldName: activeName, newName: name, option: item }, evnt)
201
224
  } else {
202
- dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name }, evnt)
225
+ dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name, option: item }, evnt)
226
+ }
227
+ }
228
+ }
229
+
230
+ const handleRefreshTabEvent = (evnt: KeyboardEvent, item: VxeTabPaneDefines.TabConfig | VxeTabPaneProps) => {
231
+ evnt.stopPropagation()
232
+ const { activeName, cacheTabMaps } = reactData
233
+ const { name } = item
234
+ const refreshOpts = computeRefreshOpts.value
235
+ const { queryMethod } = refreshOpts
236
+ const cacheItem = name ? cacheTabMaps[name] : null
237
+ if (cacheItem) {
238
+ if (queryMethod) {
239
+ cacheItem.loading = true
240
+ Promise.resolve(
241
+ queryMethod({ $tabs: $xeTabs, value: activeName, name, option: item })
242
+ ).finally(() => {
243
+ cacheItem.loading = false
244
+ })
245
+ } else {
246
+ errLog('vxe.error.notFunc', ['refresh-config.queryMethod'])
203
247
  }
204
248
  }
205
249
  }
@@ -207,7 +251,8 @@ export default defineComponent({
207
251
  const handleCloseTabEvent = (evnt: KeyboardEvent, item: VxeTabPaneDefines.TabConfig | VxeTabPaneProps, index: number, list: VxeTabsPropTypes.Options | VxeTabPaneDefines.TabConfig[]) => {
208
252
  evnt.stopPropagation()
209
253
  const { activeName } = reactData
210
- const beforeMethod = props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod
254
+ const closeOpts = computeCloseOpts.value
255
+ const beforeMethod = closeOpts.beforeMethod || props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod
211
256
  const { name } = item
212
257
  const value = activeName
213
258
  let nextName = value
@@ -215,7 +260,7 @@ export default defineComponent({
215
260
  const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1]
216
261
  nextName = nextItem ? nextItem.name : null
217
262
  }
218
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName })) {
263
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })) {
219
264
  dispatchEvent('tab-close', { value, name, nextName }, evnt)
220
265
  } else {
221
266
  dispatchEvent('tab-close-fail', { value, name, nextName }, evnt)
@@ -360,9 +405,14 @@ export default defineComponent({
360
405
  Object.assign($xeTabs, tabsMethods, tabsPrivateMethods)
361
406
 
362
407
  const renderTabHeader = (tabList: VxeTabsPropTypes.Options | VxeTabPaneDefines.TabConfig[]) => {
363
- const { type, titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose } = props
364
- const { activeName, lintLeft, lintWidth, isTabOver } = reactData
408
+ const { type, titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose, closeConfig, refreshConfig } = props
409
+ const { activeName, lintLeft, lintWidth, isTabOver, cacheTabMaps } = reactData
365
410
  const extraSlot = slots.extra
411
+ const closeOpts = computeCloseOpts.value
412
+ const closeVisibleMethod = closeOpts.visibleMethod
413
+ const refreshOpts = computeRefreshOpts.value
414
+ const refreshVisibleMethod = refreshOpts.visibleMethod
415
+
366
416
  return h('div', {
367
417
  class: 'vxe-tabs-header'
368
418
  }, [
@@ -387,10 +437,14 @@ export default defineComponent({
387
437
  const tabSlot = slots ? slots.tab : null
388
438
  const itemWidth = titleWidth || allTitleWidth
389
439
  const itemAlign = titleAlign || allTitleAlign
440
+ const params = { $tabs: $xeTabs, value: activeName, name, option: item }
441
+ const isActive = activeName === name
442
+ const cacheItem = name ? cacheTabMaps[name] : null
443
+ const isLoading = cacheItem ? cacheItem.loading : false
390
444
  return h('div', {
391
445
  key: `${name}`,
392
446
  class: ['vxe-tabs-header--item', itemAlign ? `align--${itemAlign}` : '', {
393
- 'is--active': activeName === name
447
+ 'is--active': isActive
394
448
  }],
395
449
  style: itemWidth
396
450
  ? {
@@ -420,7 +474,19 @@ export default defineComponent({
420
474
  class: 'vxe-tabs-header--item-name'
421
475
  }, tabSlot ? callSlot(tabSlot, { name, title }) : `${title}`)
422
476
  ]),
423
- showClose
477
+ (isEnableConf(refreshConfig) || refreshOpts.enabled) && (refreshVisibleMethod ? refreshVisibleMethod(params) : isActive)
478
+ ? h('div', {
479
+ class: 'vxe-tabs-header--refresh-btn',
480
+ onClick (evnt: KeyboardEvent) {
481
+ handleRefreshTabEvent(evnt, item)
482
+ }
483
+ }, [
484
+ h('i', {
485
+ class: isLoading ? getIcon().TABS_TAB_REFRESH_LOADING : getIcon().TABS_TAB_REFRESH
486
+ })
487
+ ])
488
+ : createCommentVNode(),
489
+ (showClose || (isEnableConf(closeConfig) || closeOpts.enabled)) && (!closeVisibleMethod || closeVisibleMethod(params))
424
490
  ? h('div', {
425
491
  class: 'vxe-tabs-header--close-btn',
426
492
  onClick (evnt: KeyboardEvent) {
@@ -431,6 +431,8 @@ setIcon({
431
431
  TABS_TAB_BUTTON_LEFT: iconPrefix + 'arrow-left',
432
432
  TABS_TAB_BUTTON_RIGHT: iconPrefix + 'arrow-right',
433
433
  TABS_TAB_CLOSE: iconPrefix + 'close',
434
+ TABS_TAB_REFRESH: iconPrefix + 'refresh',
435
+ TABS_TAB_REFRESH_LOADING: iconPrefix + 'refresh roll',
434
436
 
435
437
  // text
436
438
  TEXT_COPY: iconPrefix + 'copy',
@@ -44,24 +44,6 @@
44
44
  opacity: 1;
45
45
  }
46
46
  }
47
- &.is--loading {
48
- .vxe-drawer--header,
49
- .vxe-drawer--footer {
50
- position: relative;
51
- border-bottom-color: var(--vxe-ui-loading-background-color);
52
- &:before {
53
- content: "";
54
- position: absolute;
55
- top: 0;
56
- left: 0;
57
- width: 100%;
58
- height: 100%;
59
- z-index: 1;
60
- user-select: none;
61
- background-color: var(--vxe-ui-loading-background-color);
62
- }
63
- }
64
- }
65
47
  &:not(.lock--view) {
66
48
  pointer-events: none;
67
49
  }
@@ -238,24 +238,6 @@ html[data-vxe-lock-scroll] {
238
238
  visibility: visible;
239
239
  }
240
240
  }
241
- &.is--loading {
242
- .vxe-modal--header,
243
- .vxe-modal--footer {
244
- position: relative;
245
- border-bottom-color: var(--vxe-ui-loading-background-color);
246
- &:before {
247
- content: "";
248
- position: absolute;
249
- top: 0;
250
- left: 0;
251
- width: 100%;
252
- height: 100%;
253
- z-index: 1;
254
- user-select: none;
255
- background-color: var(--vxe-ui-loading-background-color);
256
- }
257
- }
258
- }
259
241
  &:not(.lock--view) {
260
242
  pointer-events: none;
261
243
  }
@@ -106,7 +106,9 @@
106
106
  flex-shrink: 0;
107
107
  padding: 0 0.5em;
108
108
  &.is--active {
109
- color: var(--vxe-ui-font-primary-color);
109
+ .vxe-tabs-header--item-content {
110
+ color: var(--vxe-ui-font-primary-color);
111
+ }
110
112
  }
111
113
  &.align--left {
112
114
  text-align: left;
@@ -135,11 +137,13 @@
135
137
  .vxe-tabs-header--item-name {
136
138
  padding: 0 0.6em;
137
139
  }
140
+ .vxe-tabs-header--refresh-btn,
138
141
  .vxe-tabs-header--close-btn {
139
142
  font-size: 0.8em;
140
143
  border-radius: 50%;
141
144
  width: 1.5em;
142
145
  height: 1.5em;
146
+ margin: 0 0.2em;
143
147
  line-height: 1.5em;
144
148
  text-align: center;
145
149
  &:hover {
@@ -1,8 +1,7 @@
1
- import { VxeTableDefines, VxeTableConstructor } from '../table'
2
- import { VxeGridConstructor } from '../grid'
1
+ import { VxeTableDefines } from '../table'
3
2
  import { VxeColumnPropTypes } from '../column'
4
3
 
5
- /* eslint-disable no-use-before-define */
4
+ /* eslint-disable @typescript-eslint/no-unused-vars,no-use-before-define */
6
5
 
7
6
  export interface TableValidatorMethods<D = any> {
8
7
  /**
@@ -126,6 +126,9 @@ export namespace VxeTablePropTypes {
126
126
  $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
127
127
  $rowIndex: number
128
128
  column: VxeTableDefines.ColumnInfo<D>
129
+ columnIndex: number
130
+ $columnIndex: number
131
+ _columnIndex: number
129
132
  fixed: VxeColumnPropTypes.Fixed
130
133
  type: string
131
134
  }) => void | null | string | { [key: string]: boolean | null | undefined })
@@ -953,7 +956,7 @@ export namespace VxeTablePropTypes {
953
956
  columnIndex: number
954
957
  $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
955
958
  $grid: VxeGridConstructor<D> | null | undefined
956
- }): boolean
959
+ }): void
957
960
  }
958
961
  export interface KeyboardOpts<D = any> extends KeyboardConfig<D> { }
959
962
 
@@ -39,13 +39,71 @@ export namespace VxeTabsPropTypes {
39
39
  name: VxeTabsPropTypes.ModelValue
40
40
  oldName: VxeTabsPropTypes.ModelValue
41
41
  newName: VxeTabsPropTypes.ModelValue
42
+ option: Omit<VxeTabPaneProps, 'slots'>
42
43
  }) => boolean
44
+ /**
45
+ * 请使用 closeConfig.beforeMethod
46
+ * @deprecated
47
+ */
43
48
  export type BeforeCloseMethod = (params: {
44
49
  $tabs: VxeTabsConstructor
45
50
  value: VxeTabsPropTypes.ModelValue
46
51
  name: VxeTabsPropTypes.ModelValue
47
52
  nextName: VxeTabsPropTypes.ModelValue | null
53
+ option: Omit<VxeTabPaneProps, 'slots'>
48
54
  }) => boolean
55
+ export interface CloseConfig {
56
+ /**
57
+ * 是否启用
58
+ */
59
+ enabled?: boolean
60
+ /**
61
+ * 页签关闭方法,该方法的返回值用来决定当前页签是否允许关闭
62
+ * @returns boolean
63
+ */
64
+ beforeMethod?: (params: {
65
+ $tabs: VxeTabsConstructor
66
+ value: VxeTabsPropTypes.ModelValue
67
+ name: VxeTabsPropTypes.ModelValue
68
+ nextName: VxeTabsPropTypes.ModelValue | null
69
+ option: Omit<VxeTabPaneProps, 'slots'>
70
+ }) => boolean
71
+ /**
72
+ * 显示关闭按钮方法,该方法的返回值用来决定当前页签的关闭按钮是否显示
73
+ * @returns boolean
74
+ */
75
+ visibleMethod?: (params: {
76
+ $tabs: VxeTabsConstructor
77
+ value: VxeTabsPropTypes.ModelValue
78
+ name: VxeTabsPropTypes.ModelValue
79
+ option: Omit<VxeTabPaneProps, 'slots'>
80
+ }) => boolean
81
+ }
82
+ export interface RefreshConfig {
83
+ /**
84
+ * 是否启用
85
+ */
86
+ enabled?: boolean
87
+ /**
88
+ * 查询方法
89
+ */
90
+ queryMethod?: (params: {
91
+ $tabs: VxeTabsConstructor
92
+ value: VxeTabsPropTypes.ModelValue
93
+ name: VxeTabsPropTypes.ModelValue
94
+ option: Omit<VxeTabPaneProps, 'slots'>
95
+ }) => Promise<any> | void
96
+ /**
97
+ * 显示刷新按钮方法,该方法的返回值用来决定当前页签的刷新按钮是否显示
98
+ * @returns boolean
99
+ */
100
+ visibleMethod?: (params: {
101
+ $tabs: VxeTabsConstructor
102
+ value: VxeTabsPropTypes.ModelValue
103
+ name: VxeTabsPropTypes.ModelValue
104
+ option: Omit<VxeTabPaneProps, 'slots'>
105
+ }) => boolean
106
+ }
49
107
  }
50
108
 
51
109
  export type VxeTabsProps = {
@@ -60,6 +118,19 @@ export type VxeTabsProps = {
60
118
  padding?: VxeTabsPropTypes.Padding
61
119
  trigger?: VxeTabsPropTypes.Trigger
62
120
  beforeChangeMethod?: VxeTabsPropTypes.BeforeChangeMethod
121
+ /**
122
+ * 关闭配置项
123
+ */
124
+ closeConfig?: VxeTabsPropTypes.CloseConfig
125
+ /**
126
+ * 刷新配置项
127
+ */
128
+ refreshConfig?: VxeTabsPropTypes.RefreshConfig
129
+
130
+ /**
131
+ * 请使用 closeConfig.beforeMethod
132
+ * @deprecated
133
+ */
63
134
  beforeCloseMethod?: VxeTabsPropTypes.BeforeCloseMethod
64
135
  }
65
136
 
@@ -75,6 +146,9 @@ export interface TabsReactData {
75
146
  lintWidth: number
76
147
  isTabOver: boolean
77
148
  resizeFlag: number
149
+ cacheTabMaps: Record<string, {
150
+ loading: boolean
151
+ }>
78
152
  }
79
153
 
80
154
  export interface TabsInternalData {
@@ -191,6 +191,8 @@ declare module '@vxe-ui/core' {
191
191
  TABS_TAB_BUTTON_LEFT?: string
192
192
  TABS_TAB_BUTTON_RIGHT?: string
193
193
  TABS_TAB_CLOSE?: string
194
+ TABS_TAB_REFRESH?: string
195
+ TABS_TAB_REFRESH_LOADING?: string
194
196
 
195
197
  // text
196
198
  TEXT_COPY?: string