vxe-pc-ui 3.14.38 → 3.14.40

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 (220) hide show
  1. package/es/cascader/src/cascader.js +1253 -253
  2. package/es/cascader/src/util.js +7 -0
  3. package/es/cascader/style.css +200 -21
  4. package/es/cascader/style.min.css +1 -1
  5. package/es/input/src/input.js +2 -2
  6. package/es/language/ar-EG.js +7 -0
  7. package/es/language/de-DE.js +7 -0
  8. package/es/language/en-US.js +7 -0
  9. package/es/language/es-ES.js +7 -0
  10. package/es/language/fr-FR.js +7 -0
  11. package/es/language/hu-HU.js +7 -0
  12. package/es/language/hy-AM.js +7 -0
  13. package/es/language/id-ID.js +7 -0
  14. package/es/language/it-IT.js +7 -0
  15. package/es/language/ja-JP.js +7 -0
  16. package/es/language/ko-KR.js +7 -0
  17. package/es/language/ms-MY.js +7 -0
  18. package/es/language/nb-NO.js +7 -0
  19. package/es/language/pt-BR.js +7 -0
  20. package/es/language/ru-RU.js +7 -0
  21. package/es/language/th-TH.js +7 -0
  22. package/es/language/ug-CN.js +7 -0
  23. package/es/language/uk-UA.js +7 -0
  24. package/es/language/uz-UZ.js +7 -0
  25. package/es/language/vi-VN.js +7 -0
  26. package/es/language/zh-CHT.js +7 -0
  27. package/es/language/zh-CN.js +7 -0
  28. package/es/list/style.css +2 -1
  29. package/es/list/style.min.css +1 -1
  30. package/es/number-input/src/number-input.js +25 -10
  31. package/es/number-input/src/util.js +17 -5
  32. package/es/split/style.css +1 -1
  33. package/es/split/style.min.css +1 -1
  34. package/es/splitter/style.css +1 -1
  35. package/es/splitter/style.min.css +1 -1
  36. package/es/style.css +1 -1
  37. package/es/style.min.css +1 -1
  38. package/es/tree/src/tree.js +30 -24
  39. package/es/tree-select/src/tree-select.js +22 -16
  40. package/es/tree-select/style.css +1 -8
  41. package/es/tree-select/style.min.css +1 -1
  42. package/es/ui/index.js +10 -4
  43. package/es/ui/src/dom.js +3 -3
  44. package/es/ui/src/log.js +1 -1
  45. package/es/vxe-cascader/style.css +200 -21
  46. package/es/vxe-cascader/style.min.css +1 -1
  47. package/es/vxe-list/style.css +2 -1
  48. package/es/vxe-list/style.min.css +1 -1
  49. package/es/vxe-split/style.css +1 -1
  50. package/es/vxe-split/style.min.css +1 -1
  51. package/es/vxe-splitter/style.css +1 -1
  52. package/es/vxe-splitter/style.min.css +1 -1
  53. package/es/vxe-tree-select/style.css +1 -8
  54. package/es/vxe-tree-select/style.min.css +1 -1
  55. package/lib/cascader/src/cascader.js +1312 -247
  56. package/lib/cascader/src/cascader.min.js +1 -1
  57. package/lib/cascader/src/util.js +15 -0
  58. package/lib/cascader/src/util.min.js +1 -0
  59. package/lib/cascader/style/style.css +200 -21
  60. package/lib/cascader/style/style.min.css +1 -1
  61. package/lib/index.umd.js +2868 -1726
  62. package/lib/index.umd.min.js +1 -1
  63. package/lib/input/src/input.js +2 -2
  64. package/lib/input/src/input.min.js +1 -1
  65. package/lib/language/ar-EG.js +7 -0
  66. package/lib/language/ar-EG.min.js +1 -1
  67. package/lib/language/ar-EG.umd.js +7 -0
  68. package/lib/language/de-DE.js +7 -0
  69. package/lib/language/de-DE.min.js +1 -1
  70. package/lib/language/de-DE.umd.js +7 -0
  71. package/lib/language/en-US.js +7 -0
  72. package/lib/language/en-US.min.js +1 -1
  73. package/lib/language/en-US.umd.js +7 -0
  74. package/lib/language/es-ES.js +7 -0
  75. package/lib/language/es-ES.min.js +1 -1
  76. package/lib/language/es-ES.umd.js +7 -0
  77. package/lib/language/fr-FR.js +7 -0
  78. package/lib/language/fr-FR.min.js +1 -1
  79. package/lib/language/fr-FR.umd.js +7 -0
  80. package/lib/language/hu-HU.js +7 -0
  81. package/lib/language/hu-HU.min.js +1 -1
  82. package/lib/language/hu-HU.umd.js +7 -0
  83. package/lib/language/hy-AM.js +7 -0
  84. package/lib/language/hy-AM.min.js +1 -1
  85. package/lib/language/hy-AM.umd.js +7 -0
  86. package/lib/language/id-ID.js +7 -0
  87. package/lib/language/id-ID.min.js +1 -1
  88. package/lib/language/id-ID.umd.js +7 -0
  89. package/lib/language/it-IT.js +7 -0
  90. package/lib/language/it-IT.min.js +1 -1
  91. package/lib/language/it-IT.umd.js +7 -0
  92. package/lib/language/ja-JP.js +7 -0
  93. package/lib/language/ja-JP.min.js +1 -1
  94. package/lib/language/ja-JP.umd.js +7 -0
  95. package/lib/language/ko-KR.js +7 -0
  96. package/lib/language/ko-KR.min.js +1 -1
  97. package/lib/language/ko-KR.umd.js +7 -0
  98. package/lib/language/ms-MY.js +7 -0
  99. package/lib/language/ms-MY.min.js +1 -1
  100. package/lib/language/ms-MY.umd.js +7 -0
  101. package/lib/language/nb-NO.js +7 -0
  102. package/lib/language/nb-NO.min.js +1 -1
  103. package/lib/language/nb-NO.umd.js +7 -0
  104. package/lib/language/pt-BR.js +7 -0
  105. package/lib/language/pt-BR.min.js +1 -1
  106. package/lib/language/pt-BR.umd.js +7 -0
  107. package/lib/language/ru-RU.js +7 -0
  108. package/lib/language/ru-RU.min.js +1 -1
  109. package/lib/language/ru-RU.umd.js +7 -0
  110. package/lib/language/th-TH.js +7 -0
  111. package/lib/language/th-TH.min.js +1 -1
  112. package/lib/language/th-TH.umd.js +7 -0
  113. package/lib/language/ug-CN.js +7 -0
  114. package/lib/language/ug-CN.min.js +1 -1
  115. package/lib/language/ug-CN.umd.js +7 -0
  116. package/lib/language/uk-UA.js +7 -0
  117. package/lib/language/uk-UA.min.js +1 -1
  118. package/lib/language/uk-UA.umd.js +7 -0
  119. package/lib/language/uz-UZ.js +7 -0
  120. package/lib/language/uz-UZ.min.js +1 -1
  121. package/lib/language/uz-UZ.umd.js +7 -0
  122. package/lib/language/vi-VN.js +7 -0
  123. package/lib/language/vi-VN.min.js +1 -1
  124. package/lib/language/vi-VN.umd.js +7 -0
  125. package/lib/language/zh-CHT.js +7 -0
  126. package/lib/language/zh-CHT.min.js +1 -1
  127. package/lib/language/zh-CHT.umd.js +7 -0
  128. package/lib/language/zh-CN.js +7 -0
  129. package/lib/language/zh-CN.min.js +1 -1
  130. package/lib/language/zh-CN.umd.js +7 -0
  131. package/lib/list/style/style.css +2 -1
  132. package/lib/list/style/style.min.css +1 -1
  133. package/lib/number-input/src/number-input.js +32 -10
  134. package/lib/number-input/src/number-input.min.js +1 -1
  135. package/lib/number-input/src/util.js +16 -5
  136. package/lib/number-input/src/util.min.js +1 -1
  137. package/lib/split/style/style.css +1 -1
  138. package/lib/split/style/style.min.css +1 -1
  139. package/lib/splitter/style/style.css +1 -1
  140. package/lib/splitter/style/style.min.css +1 -1
  141. package/lib/style.css +1 -1
  142. package/lib/style.min.css +1 -1
  143. package/lib/tree/src/tree.js +30 -24
  144. package/lib/tree/src/tree.min.js +1 -1
  145. package/lib/tree-select/src/tree-select.js +22 -17
  146. package/lib/tree-select/src/tree-select.min.js +1 -1
  147. package/lib/tree-select/style/style.css +1 -8
  148. package/lib/tree-select/style/style.min.css +1 -1
  149. package/lib/ui/index.js +10 -4
  150. package/lib/ui/index.min.js +1 -1
  151. package/lib/ui/src/dom.js +6 -4
  152. package/lib/ui/src/dom.min.js +1 -1
  153. package/lib/ui/src/log.js +1 -1
  154. package/lib/ui/src/log.min.js +1 -1
  155. package/lib/vxe-cascader/style/style.css +200 -21
  156. package/lib/vxe-cascader/style/style.min.css +1 -1
  157. package/lib/vxe-list/style/style.css +2 -1
  158. package/lib/vxe-list/style/style.min.css +1 -1
  159. package/lib/vxe-split/style/style.css +1 -1
  160. package/lib/vxe-split/style/style.min.css +1 -1
  161. package/lib/vxe-splitter/style/style.css +1 -1
  162. package/lib/vxe-splitter/style/style.min.css +1 -1
  163. package/lib/vxe-tree-select/style/style.css +1 -8
  164. package/lib/vxe-tree-select/style/style.min.css +1 -1
  165. package/package.json +2 -2
  166. package/packages/cascader/src/cascader.ts +1293 -280
  167. package/packages/cascader/src/util.ts +9 -0
  168. package/packages/input/src/input.ts +2 -2
  169. package/packages/language/ar-EG.ts +7 -0
  170. package/packages/language/de-DE.ts +7 -0
  171. package/packages/language/en-US.ts +7 -0
  172. package/packages/language/es-ES.ts +7 -0
  173. package/packages/language/fr-FR.ts +7 -0
  174. package/packages/language/hu-HU.ts +7 -0
  175. package/packages/language/hy-AM.ts +7 -0
  176. package/packages/language/id-ID.ts +7 -0
  177. package/packages/language/it-IT.ts +7 -0
  178. package/packages/language/ja-JP.ts +7 -0
  179. package/packages/language/ko-KR.ts +7 -0
  180. package/packages/language/ms-MY.ts +7 -0
  181. package/packages/language/nb-NO.ts +7 -0
  182. package/packages/language/pt-BR.ts +7 -0
  183. package/packages/language/ru-RU.ts +7 -0
  184. package/packages/language/th-TH.ts +7 -0
  185. package/packages/language/ug-CN.ts +7 -0
  186. package/packages/language/uk-UA.ts +7 -0
  187. package/packages/language/uz-UZ.ts +7 -0
  188. package/packages/language/vi-VN.ts +7 -0
  189. package/packages/language/zh-CHT.ts +7 -0
  190. package/packages/language/zh-CN.ts +7 -0
  191. package/packages/number-input/src/number-input.ts +25 -12
  192. package/packages/number-input/src/util.ts +18 -5
  193. package/packages/tree/src/tree.ts +33 -28
  194. package/packages/tree-select/src/tree-select.ts +23 -16
  195. package/packages/ui/index.ts +10 -3
  196. package/packages/ui/src/dom.ts +4 -3
  197. package/styles/components/cascader.scss +116 -21
  198. package/styles/components/list.scss +2 -1
  199. package/styles/components/splitter.scss +3 -1
  200. package/styles/components/tree-select.scss +1 -8
  201. package/styles/helpers/placement.scss +2 -2
  202. package/styles/theme/base.scss +7 -0
  203. package/styles/theme/dark.scss +9 -0
  204. package/styles/theme/light.scss +9 -0
  205. package/styles/variable.scss +8 -0
  206. package/types/components/cascader.d.ts +169 -56
  207. package/types/components/number-input.d.ts +12 -1
  208. package/types/ui/global-icon.d.ts +5 -0
  209. /package/es/icon/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
  210. /package/es/icon/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
  211. /package/es/icon/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
  212. /package/es/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
  213. /package/es/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
  214. /package/es/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
  215. /package/lib/icon/style/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
  216. /package/lib/icon/style/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
  217. /package/lib/icon/style/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
  218. /package/lib/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
  219. /package/lib/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
  220. /package/lib/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
@@ -235,12 +235,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
235
235
  const $xeDrawer = $xeTreeSelect.$xeDrawer
236
236
  const $xeForm = $xeTreeSelect.$xeForm
237
237
 
238
- const { transfer } = props
239
238
  const popupOpts = $xeTreeSelect.computePopupOpts as VxeTreeSelectPropTypes.PopupConfig
240
- if (XEUtils.isBoolean(popupOpts.transfer)) {
241
- return popupOpts.transfer
239
+ const { transfer } = popupOpts
240
+ if (XEUtils.isBoolean(transfer)) {
241
+ return transfer
242
242
  }
243
- if (transfer === null) {
243
+ if (props.transfer === null) {
244
244
  const globalTransfer = getConfig().treeSelect.transfer
245
245
  if (XEUtils.isBoolean(globalTransfer)) {
246
246
  return globalTransfer
@@ -249,7 +249,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
249
249
  return true
250
250
  }
251
251
  }
252
- return transfer
252
+ return props.transfer
253
253
  },
254
254
  computePopupOpts () {
255
255
  const $xeTreeSelect = this
@@ -357,17 +357,24 @@ export default /* define-vxe-component start */ defineVxeComponent({
357
357
  const treeOpts = $xeTreeSelect.computeTreeOpts as VxeTreeSelectPropTypes.TreeConfig
358
358
  return Object.assign({}, treeOpts.filterConfig, props.filterConfig)
359
359
  },
360
+ computeSelectVals () {
361
+ const $xeTreeSelect = this
362
+ const props = $xeTreeSelect
363
+
364
+ const { value: modelValue } = props
365
+ return XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
366
+ },
360
367
  computeSelectLabel () {
361
368
  const $xeTreeSelect = this
362
369
  const props = $xeTreeSelect
363
370
  const reactData = ($xeTreeSelect as any).reactData as TreeSelectReactData
364
371
  const internalData = ($xeTreeSelect as any).internalData as TreeSelectInternalData
365
372
 
366
- const { value: modelValue, showFullLabel } = props
373
+ const { showFullLabel } = props
367
374
  const { fullOptFlag, lazyOptFlag } = reactData
368
375
  const { fullNodeMaps, lazyNodeMaps } = internalData
369
376
  const labelField = $xeTreeSelect.computeLabelField as string
370
- const selectVals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
377
+ const selectVals = $xeTreeSelect.computeSelectVals as any[]
371
378
  return selectVals.map(val => {
372
379
  const cacheItem = fullNodeMaps[val]
373
380
  if (fullOptFlag && cacheItem) {
@@ -457,12 +464,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
457
464
  nodeid = getOptUniqueId()
458
465
  }
459
466
  if (keyMaps[nodeid]) {
460
- errLog('vxe.error.repeatKey', [`[tree-select] ${nodeKeyField}`, nodeid])
467
+ errLog('vxe.error.repeatKey', [nodeKeyField, nodeid])
461
468
  }
462
469
  keyMaps[nodeid] = true
463
470
  const value = item[valueField]
464
471
  if (nodeMaps[value]) {
465
- errLog('vxe.error.repeatKey', [`[tree-select] ${valueField}`, value])
472
+ errLog('vxe.error.repeatKey', [valueField, value])
466
473
  }
467
474
  nodeMaps[value] = {
468
475
  item,
@@ -470,7 +477,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
470
477
  items,
471
478
  parent: parentItem,
472
479
  nodes,
473
- fullLabel: nodes.map(item => item[labelField]).join((separator || '/') + ' ')
480
+ fullLabel: nodes.map(item => item[labelField]).join((separator || ' / '))
474
481
  }
475
482
  }
476
483
  if (optList) {
@@ -555,7 +562,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
555
562
  handleStyle()
556
563
  return $xeTreeSelect.$nextTick().then(handleStyle)
557
564
  },
558
- showOptionPanel () {
565
+ showOptionPanel (evnt?: Event) {
559
566
  const $xeTreeSelect = this
560
567
  const props = $xeTreeSelect
561
568
  const reactData = $xeTreeSelect.reactData
@@ -593,7 +600,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
593
600
  }, 10)
594
601
  $xeTreeSelect.updateZindex()
595
602
  $xeTreeSelect.updatePlacement()
596
- $xeTreeSelect.dispatchEvent('visible-change', { visible: true }, null)
603
+ $xeTreeSelect.dispatchEvent('visible-change', { visible: true }, evnt || null)
597
604
  }
598
605
  },
599
606
  hideOptionPanel (evnt?: Event) {
@@ -648,7 +655,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
648
655
  $tree.setAllCheckboxNode(true).then(({ checkNodeKeys, checkNodes }) => {
649
656
  $xeTreeSelect.changeEvent($event, checkNodeKeys, checkNodes[0])
650
657
  $xeTreeSelect.dispatchEvent('all-change', { value: checkNodeKeys }, $event)
651
- if (XEUtils.isBoolean(autoClose) ? autoClose : checkedClosable) {
658
+ if (XEUtils.isBoolean(checkedClosable) ? checkedClosable : autoClose) {
652
659
  $xeTreeSelect.hideOptionPanel($event)
653
660
  }
654
661
  })
@@ -665,7 +672,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
665
672
  if ($tree) {
666
673
  const value = multiple ? [] : null
667
674
  $tree.clearCheckboxNode().then(() => {
668
- if (XEUtils.isBoolean(autoClose) ? autoClose : clearClosable) {
675
+ if (XEUtils.isBoolean(clearClosable) ? clearClosable : autoClose) {
669
676
  $xeTreeSelect.hideOptionPanel($event)
670
677
  }
671
678
  })
@@ -775,7 +782,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
775
782
  if (!isDisabled) {
776
783
  if (!reactData.visiblePanel) {
777
784
  reactData.triggerFocusPanel = true
778
- $xeTreeSelect.showOptionPanel()
785
+ $xeTreeSelect.showOptionPanel(evnt)
779
786
  setTimeout(() => {
780
787
  reactData.triggerFocusPanel = false
781
788
  }, 150)
@@ -834,7 +841,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
834
841
  if (reactData.visiblePanel) {
835
842
  $xeTreeSelect.hideOptionPanel($event)
836
843
  } else {
837
- $xeTreeSelect.showOptionPanel()
844
+ $xeTreeSelect.showOptionPanel($event)
838
845
  }
839
846
  }
840
847
  },
@@ -70,7 +70,10 @@ setConfig({
70
70
  },
71
71
  carouselItem: {},
72
72
  cascader: {
73
- autoClose: true
73
+ showFullLabel: true,
74
+ treeConfig: {
75
+ showIcon: true
76
+ }
74
77
  },
75
78
  checkbox: {},
76
79
  checkboxButton: {},
@@ -425,7 +428,6 @@ setConfig({
425
428
  }
426
429
  },
427
430
  treeSelect: {
428
- autoClose: null as any,
429
431
  // separator: '/',
430
432
  virtualYConfig: {
431
433
  enabled: true,
@@ -701,7 +703,12 @@ setIcon({
701
703
 
702
704
  // context-menu
703
705
  CONTEXT_MENU_OPTION_LOADING: iconPrefix + 'spinner roll',
704
- CONTEXT_MENU_CHILDREN: iconPrefix + 'arrow-right'
706
+ CONTEXT_MENU_CHILDREN: iconPrefix + 'arrow-right',
707
+
708
+ // cascader
709
+ CASCADER_NODE_OPEN: iconPrefix + 'arrow-right',
710
+ CASCADER_NODE_CLOSE: iconPrefix + 'arrow-right',
711
+ CASCADER_NODE_LOADED: iconPrefix + 'spinner roll'
705
712
  })
706
713
 
707
714
  export * from '@vxe-ui/core'
@@ -169,8 +169,9 @@ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined
169
169
  defaultPlacement?: '' | 'top' | 'bottom' | null
170
170
  teleportTo?: boolean
171
171
  marginSize?: number
172
+ isMinWidth?: boolean
172
173
  }) {
173
- const { placement, defaultPlacement, teleportTo, marginSize } = Object.assign({ teleportTo: false, marginSize: 18 }, options)
174
+ const { placement, defaultPlacement, teleportTo, marginSize, isMinWidth } = Object.assign({ teleportTo: false, marginSize: 18, isMinWidth: true }, options)
174
175
  let panelPlacement: 'top' | 'bottom' = 'bottom'
175
176
  let top: number | '' = ''
176
177
  let bottom: number | '' = ''
@@ -238,7 +239,7 @@ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined
238
239
  } else if (!placement) {
239
240
  // 如果下面不够放,则向上
240
241
  top = targetHeight
241
- if (targetRect.top + targetRect.height + marginSize > visibleHeight) {
242
+ if (targetRect.top + targetHeight + panelHeight + marginSize > visibleHeight) {
242
243
  // 如果上面不够放,则向下(优先)
243
244
  if (targetRect.top - targetHeight - panelHeight > marginSize) {
244
245
  panelPlacement = 'top'
@@ -264,7 +265,7 @@ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined
264
265
  if (XEUtils.isNumber(right)) {
265
266
  stys.right = toCssUnit(right)
266
267
  }
267
- if (XEUtils.isNumber(minWidth)) {
268
+ if (isMinWidth && XEUtils.isNumber(minWidth)) {
268
269
  stys.minWidth = toCssUnit(minWidth)
269
270
  }
270
271
  }
@@ -7,13 +7,14 @@
7
7
  width: 180px;
8
8
  color: var(--vxe-ui-font-color);
9
9
  text-align: left;
10
+ --vxe-ui-cascader-chunk-size: 1;
10
11
  & > .vxe-input {
11
12
  .vxe-input--inner {
12
13
  cursor: pointer;
13
14
  }
14
15
  }
15
16
  &.is--filterable {
16
- .vxe-cascader-tree--wrapper {
17
+ .vxe-cascader-chunk--wrapper {
17
18
  padding-top: 0;
18
19
  }
19
20
  .vxe-cascader--panel-header {
@@ -56,35 +57,46 @@
56
57
 
57
58
  .vxe-cascader--panel {
58
59
  pointer-events: none;
59
- @include placement.createPlacementPanel();
60
+ @include placement.createPlacementPanel(var(--vxe-ui-cascader-node-width));
60
61
  }
61
62
 
62
63
  .vxe-cascader--panel-search {
63
64
  display: block;
65
+ padding: var(--vxe-ui-current-padding);
66
+ width: calc(var(--vxe-ui-cascader-node-width) * var(--vxe-ui-cascader-chunk-size));
64
67
  .vxe-cascader-search--input {
65
68
  width: 100%;
66
69
  }
67
70
  }
68
71
 
69
- .vxe-cascader--header-button {
72
+ .vxe-cascader--header-button,
73
+ .vxe-cascader--footer-button {
70
74
  display: flex;
71
75
  flex-direction: row;
72
76
  white-space: nowrap;
73
77
  }
74
- .vxe-cascader--header-total {
75
- display: flex;
76
- flex-direction: row;
77
- align-items: center;
78
- justify-content: center;
78
+ .vxe-cascader--total-btns {
79
+ padding-left: var(--vxe-ui-current-padding);
79
80
  flex-shrink: 0;
80
- padding-left: 0.8em;
81
81
  }
82
- .vxe-cascader--header-btns {
82
+ .vxe-cascader--oper-btns {
83
83
  display: flex;
84
84
  flex-direction: row;
85
85
  flex-grow: 1;
86
86
  justify-content: right;
87
87
  }
88
+ .vxe-cascader--footer-button,
89
+ .vxe-cascader--selected-btns,
90
+ .vxe-cascader--expand-btns {
91
+ display: flex;
92
+ flex-direction: row;
93
+ flex-grow: 1;
94
+ }
95
+ .vxe-cascader--selected-btns {
96
+ & + .vxe-cascader--expand-btns {
97
+ padding-left: 2.2em;
98
+ }
99
+ }
88
100
 
89
101
  .vxe-cascader--panel-wrapper {
90
102
  display: flex;
@@ -97,14 +109,6 @@
97
109
  pointer-events: auto;
98
110
  }
99
111
 
100
- .vxe-cascader--panel-search {
101
- display: block;
102
- padding: var(--vxe-ui-layout-padding-default);
103
- .vxe-cascader-search--input {
104
- width: 100%;
105
- }
106
- }
107
-
108
112
  .vxe-cascader--panel-header {
109
113
  border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
110
114
  }
@@ -118,12 +122,103 @@
118
122
  padding: 4px 0;
119
123
  }
120
124
 
121
- .vxe-cascader-tree--wrapper {
125
+ .vxe-cascader--checkbox-option {
126
+ padding-right: 0.4em;
127
+ @include baseMixin.createCheckboxIcon();
128
+ }
129
+ .vxe-cascader--radio-option {
130
+ padding-right: 0.4em;
131
+ @include baseMixin.createRadioIcon();
132
+ }
133
+
134
+ .vxe-cascader--panel-body {
135
+ border-top: 1px solid var(--vxe-ui-base-popup-border-color)
136
+ }
137
+
138
+ .vxe-cascader-chunk--wrapper {
122
139
  position: relative;
123
- overflow: auto;
124
- padding: var(--vxe-ui-layout-padding-default);
140
+ display: flex;
141
+ flex-direction: row;
125
142
  outline: 0;
126
143
  }
144
+ .vxe-cascader-chunk--item-wrapper {
145
+ flex-shrink: 0;
146
+ border-left: 1px solid var(--vxe-ui-base-popup-border-color);
147
+ padding: var(--vxe-ui-current-padding) 0;
148
+ &:first-child {
149
+ border-left: 0;
150
+ }
151
+ .vxe-list {
152
+ .vxe-list--virtual-wrapper {
153
+ height: var(--vxe-ui-cascader-chunk-height);
154
+ width: var(--vxe-ui-cascader-node-width);
155
+ overflow-x: hidden;
156
+ overflow-y: hidden;
157
+ &:hover {
158
+ overflow-y: auto;
159
+ }
160
+ }
161
+ .vxe-list--body {
162
+ width: var(--vxe-ui-cascader-node-width);
163
+ }
164
+ }
165
+ }
166
+ .vxe-cascader-chunk--node-item {
167
+ display: flex;
168
+ flex-direction: row;
169
+ height: var(--vxe-ui-cascader-node-height);
170
+ line-height: var(--vxe-ui-cascader-node-height);
171
+ padding: 0 calc(var(--vxe-ui-current-padding) + 18px) 0 var(--vxe-ui-current-padding);
172
+ cursor: pointer;
173
+ &:hover {
174
+ background-color: var(--vxe-ui-cascader-node-hover-background-color);
175
+ }
176
+ &.is--current,
177
+ &.is--expand {
178
+ font-weight: 700;
179
+ }
180
+ &.is--current {
181
+ background-color: var(--vxe-ui-cascader-node-current-background-color);
182
+ }
183
+ &.is-checkbox--indeterminate {
184
+ color: var(--vxe-ui-cascader-node-checkbox-indeterminate-color);
185
+ }
186
+ &.is-radio--checked,
187
+ &.is-checkbox--checked {
188
+ color: var(--vxe-ui-cascader-node-checkbox-checked-color);
189
+ }
190
+ }
191
+ .vxe-cascader-chunk--node-item-inner {
192
+ display: flex;
193
+ flex-direction: row;
194
+ overflow: hidden;
195
+ flex-grow: 1;
196
+ }
197
+ .vxe-cascader-chunk--node-item-title {
198
+ flex-grow: 1;
199
+ overflow: hidden;
200
+ text-overflow: ellipsis;
201
+ white-space: nowrap;
202
+ }
203
+ .vxe-cascader-chunk--node-item-switcher {
204
+ user-select: none;
205
+ flex-shrink: 0;
206
+ width: 1em;
207
+ position: relative;
208
+ .vxe-cascader--node-item-icon > i {
209
+ display: inline-block;
210
+ @include baseMixin.createAnimationTransition(transform, .2s);
211
+ }
212
+ }
213
+
214
+ .vxe-cascader,
215
+ .vxe-cascader--panel {
216
+ --vxe-ui-current-padding: var(--vxe-ui-layout-padding-default);
217
+ &.size--small,
218
+ &.size--mini {
219
+ --vxe-ui-current-padding: var(--vxe-ui-layout-padding-half);
220
+ }
221
+ }
127
222
 
128
223
  .vxe-cascader,
129
224
  .vxe-cascader--panel {
@@ -7,7 +7,8 @@
7
7
  direction: ltr;
8
8
  .vxe-list--virtual-wrapper {
9
9
  position: relative;
10
- overflow: auto;
10
+ overflow-x: auto;
11
+ overflow-y: auto;
11
12
  outline: 0;
12
13
  }
13
14
  .vxe-list--y-space {
@@ -280,7 +280,9 @@
280
280
  &.is--hidden,
281
281
  &.is--width,
282
282
  &.is--height {
283
- flex-shrink: 0;
283
+ &:not(.is--fill) {
284
+ flex-shrink: 0;
285
+ }
284
286
  }
285
287
  &.is--border {
286
288
  & > .vxe-splitter-panel--wrapper {
@@ -61,6 +61,7 @@
61
61
 
62
62
  .vxe-tree-select--panel-search {
63
63
  display: block;
64
+ padding: var(--vxe-ui-current-padding);
64
65
  .vxe-tree-select-search--input {
65
66
  width: 100%;
66
67
  }
@@ -106,14 +107,6 @@
106
107
  pointer-events: auto;
107
108
  }
108
109
 
109
- .vxe-tree-select--panel-search {
110
- display: block;
111
- padding: var(--vxe-ui-current-padding);
112
- .vxe-tree-select-search--input {
113
- width: 100%;
114
- }
115
- }
116
-
117
110
  .vxe-tree-select--panel-header {
118
111
  border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
119
112
  }
@@ -1,6 +1,6 @@
1
1
  @use './baseMixin.scss';
2
2
 
3
- @mixin createPlacementPanel {
3
+ @mixin createPlacementPanel($minWidth: 100%) {
4
4
  display: none;
5
5
  position: absolute;
6
6
  left: 0;
@@ -8,7 +8,7 @@
8
8
  color: var(--vxe-ui-font-color);
9
9
  text-align: left;
10
10
  &:not(.is--transfer) {
11
- min-width: 100%;
11
+ min-width: $minWidth;
12
12
  }
13
13
  &.is--transfer {
14
14
  position: fixed;
@@ -214,4 +214,11 @@
214
214
  /*backtop*/
215
215
  --vxe-ui-backtop-right: 2em;
216
216
  --vxe-ui-backtop-bottom: 2em;
217
+
218
+ /*cascader*/
219
+ --vxe-ui-cascader-chunk-height: 12em;
220
+ --vxe-ui-cascader-node-width: 12em;
221
+ --vxe-ui-cascader-node-height: 2em;
222
+ --vxe-ui-cascader-node-checkbox-indeterminate-color: inherit;
223
+ --vxe-ui-cascader-node-checkbox-checked-color: var(--vxe-ui-font-primary-color);
217
224
  }
@@ -119,4 +119,13 @@
119
119
  --vxe-ui-splitter-handle-button-background-color: #9f9f9f;
120
120
  --vxe-ui-splitter-handle-bar-background-color: #444444;
121
121
  --vxe-ui-splitter-handle-bar-hover-background-color: #606060;
122
+
123
+ /*cascader*/
124
+ --vxe-ui-cascader-node-hover-background-color: #262727;
125
+ --vxe-ui-cascader-node-radio-checked-background-color: #604820;
126
+ --vxe-ui-cascader-node-hover-radio-checked-background-color: #6e5326;
127
+ --vxe-ui-cascader-node-checkbox-checked-background-color: #604820;
128
+ --vxe-ui-cascader-node-hover-checkbox-checked-background-color: #6e5326;
129
+ --vxe-ui-cascader-node-current-background-color: #18222c;
130
+ --vxe-ui-cascader-node-hover-current-background-color: #262727;
122
131
  }
@@ -118,4 +118,13 @@
118
118
  --vxe-ui-splitter-handle-button-background-color: #{light_variable.$vxe-ui-splitter-handle-button-background-color};
119
119
  --vxe-ui-splitter-handle-bar-background-color: #{light_variable.$vxe-ui-splitter-handle-bar-background-color};
120
120
  --vxe-ui-splitter-handle-bar-hover-background-color: #{light_variable.$vxe-ui-splitter-handle-bar-hover-background-color};
121
+
122
+ /*cascader*/
123
+ --vxe-ui-cascader-node-hover-background-color: #{light_variable.$vxe-ui-cascader-node-hover-background-color};
124
+ --vxe-ui-cascader-node-radio-checked-background-color: #{light_variable.$vxe-ui-cascader-node-radio-checked-background-color};
125
+ --vxe-ui-cascader-node-hover-radio-checked-background-color: #{light_variable.$vxe-ui-cascader-node-hover-radio-checked-background-color};
126
+ --vxe-ui-cascader-node-checkbox-checked-background-color: #{light_variable.$vxe-ui-cascader-node-checkbox-checked-background-color};
127
+ --vxe-ui-cascader-node-hover-checkbox-checked-background-color: #{light_variable.$vxe-ui-cascader-node-hover-checkbox-checked-background-color};
128
+ --vxe-ui-cascader-node-current-background-color: #{light_variable.$vxe-ui-cascader-node-current-background-color};
129
+ --vxe-ui-cascader-node-hover-current-background-color: #{light_variable.$vxe-ui-cascader-node-hover-current-background-color};
121
130
  }
@@ -112,3 +112,11 @@ $vxe-ui-splitter-handle-button-background-color: #8b8b8b;
112
112
  $vxe-ui-splitter-handle-bar-background-color: #e2e2e3;
113
113
  $vxe-ui-splitter-handle-bar-hover-background-color: #d8d8d8;
114
114
 
115
+ /*cascader*/
116
+ $vxe-ui-cascader-node-hover-background-color: #f5f7fa !default;
117
+ $vxe-ui-cascader-node-radio-checked-background-color: #fff3e0 !default;
118
+ $vxe-ui-cascader-node-hover-radio-checked-background-color: #ffebbc !default;
119
+ $vxe-ui-cascader-node-checkbox-checked-background-color: #fff3e0 !default;
120
+ $vxe-ui-cascader-node-hover-checkbox-checked-background-color: #ffebbc !default;
121
+ $vxe-ui-cascader-node-current-background-color: #e6f7ff !default;
122
+ $vxe-ui-cascader-node-hover-current-background-color: #d7effb !default;