vxe-pc-ui 3.17.26 → 3.17.28

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 (77) hide show
  1. package/es/color-picker/src/color-picker.js +11 -5
  2. package/es/color-picker/style.css +44 -35
  3. package/es/color-picker/style.min.css +1 -1
  4. package/es/drawer/src/drawer.js +11 -1
  5. package/es/drawer/style.css +10 -2
  6. package/es/drawer/style.min.css +1 -1
  7. package/es/icon/style.css +1 -1
  8. package/es/modal/src/modal.js +62 -14
  9. package/es/modal/style.css +31 -10
  10. package/es/modal/style.min.css +1 -1
  11. package/es/style.css +1 -1
  12. package/es/style.min.css +1 -1
  13. package/es/ui/index.js +5 -1
  14. package/es/ui/src/dom.js +9 -2
  15. package/es/ui/src/log.js +1 -1
  16. package/es/vxe-color-picker/style.css +44 -35
  17. package/es/vxe-color-picker/style.min.css +1 -1
  18. package/es/vxe-drawer/style.css +10 -2
  19. package/es/vxe-drawer/style.min.css +1 -1
  20. package/es/vxe-modal/style.css +31 -10
  21. package/es/vxe-modal/style.min.css +1 -1
  22. package/lib/color-picker/src/color-picker.js +6 -4
  23. package/lib/color-picker/src/color-picker.min.js +1 -1
  24. package/lib/color-picker/style/style.css +44 -35
  25. package/lib/color-picker/style/style.min.css +1 -1
  26. package/lib/drawer/src/drawer.js +16 -2
  27. package/lib/drawer/src/drawer.min.js +1 -1
  28. package/lib/drawer/style/style.css +10 -2
  29. package/lib/drawer/style/style.min.css +1 -1
  30. package/lib/icon/style/style.css +1 -1
  31. package/lib/icon/style/style.min.css +1 -1
  32. package/lib/index.umd.js +111 -29
  33. package/lib/index.umd.min.js +1 -1
  34. package/lib/modal/src/modal.js +74 -19
  35. package/lib/modal/src/modal.min.js +1 -1
  36. package/lib/modal/style/style.css +31 -10
  37. package/lib/modal/style/style.min.css +1 -1
  38. package/lib/style.css +1 -1
  39. package/lib/style.min.css +1 -1
  40. package/lib/ui/index.js +5 -1
  41. package/lib/ui/index.min.js +1 -1
  42. package/lib/ui/src/dom.js +10 -2
  43. package/lib/ui/src/dom.min.js +1 -1
  44. package/lib/ui/src/log.js +1 -1
  45. package/lib/ui/src/log.min.js +1 -1
  46. package/lib/vxe-color-picker/style/style.css +44 -35
  47. package/lib/vxe-color-picker/style/style.min.css +1 -1
  48. package/lib/vxe-drawer/style/style.css +10 -2
  49. package/lib/vxe-drawer/style/style.min.css +1 -1
  50. package/lib/vxe-modal/style/style.css +31 -10
  51. package/lib/vxe-modal/style/style.min.css +1 -1
  52. package/package.json +1 -1
  53. package/packages/color-picker/src/color-picker.ts +11 -5
  54. package/packages/drawer/src/drawer.ts +11 -1
  55. package/packages/modal/src/modal.ts +62 -14
  56. package/packages/ui/index.ts +4 -0
  57. package/packages/ui/src/dom.ts +10 -2
  58. package/styles/components/color-picker.scss +35 -26
  59. package/styles/components/drawer.scss +15 -2
  60. package/styles/components/modal.scss +49 -10
  61. package/styles/theme/dark.scss +4 -1
  62. package/styles/theme/light.scss +3 -0
  63. package/styles/variable.scss +3 -0
  64. package/types/components/drawer.d.ts +4 -0
  65. package/types/components/modal.d.ts +9 -0
  66. /package/es/icon/{iconfont.1788319610241.ttf → iconfont.1788399110179.ttf} +0 -0
  67. /package/es/icon/{iconfont.1788319610241.woff → iconfont.1788399110179.woff} +0 -0
  68. /package/es/icon/{iconfont.1788319610241.woff2 → iconfont.1788399110179.woff2} +0 -0
  69. /package/es/{iconfont.1788319610241.ttf → iconfont.1788399110179.ttf} +0 -0
  70. /package/es/{iconfont.1788319610241.woff → iconfont.1788399110179.woff} +0 -0
  71. /package/es/{iconfont.1788319610241.woff2 → iconfont.1788399110179.woff2} +0 -0
  72. /package/lib/icon/style/{iconfont.1788319610241.ttf → iconfont.1788399110179.ttf} +0 -0
  73. /package/lib/icon/style/{iconfont.1788319610241.woff → iconfont.1788399110179.woff} +0 -0
  74. /package/lib/icon/style/{iconfont.1788319610241.woff2 → iconfont.1788399110179.woff2} +0 -0
  75. /package/lib/{iconfont.1788319610241.ttf → iconfont.1788399110179.ttf} +0 -0
  76. /package/lib/{iconfont.1788319610241.woff → iconfont.1788399110179.woff} +0 -0
  77. /package/lib/{iconfont.1788319610241.woff2 → iconfont.1788399110179.woff2} +0 -0
@@ -2,7 +2,7 @@ import { PropType, CreateElement, VNode } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { VxeUI, getConfig, getI18n, getIcon, createEvent, globalEvents, globalMixins, renderEmptyElement, GLOBAL_EVENT_KEYS } from '../../ui'
5
- import { getDomNode, getEventTargetNode, getPopupAppendElement, toCssUnit } from '../../ui/src/dom'
5
+ import { getEventTargetNode, getPopupAppendElement, getPopupWrapperElement, toCssUnit } from '../../ui/src/dom'
6
6
  import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue } from '../../ui/src/utils'
7
7
  import VxeButtonComponent from '../../button'
8
8
  import VxeLoadingComponent from '../../loading'
@@ -98,6 +98,14 @@ export default /* define-vxe-component start */ defineVxeComponent({
98
98
  default: () => getConfig().modal.confirmClosable
99
99
  },
100
100
  resize: Boolean as PropType<VxeModalPropTypes.Resize>,
101
+ border: {
102
+ type: Boolean as PropType<VxeModalPropTypes.Border>,
103
+ default: () => getConfig().modal.border
104
+ },
105
+ showTitleBackground: {
106
+ type: Boolean as PropType<VxeModalPropTypes.ShowTitleBackground>,
107
+ default: () => getConfig().modal.showTitleBackground
108
+ },
101
109
  showHeader: {
102
110
  type: Boolean as PropType<VxeModalPropTypes.ShowHeader>,
103
111
  default: () => getConfig().modal.showHeader
@@ -171,6 +179,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
171
179
  type: [String, Function] as PropType<VxeModalPropTypes.AppendTo>,
172
180
  default: () => getConfig().modal.appendTo
173
181
  },
182
+ isWithinAppendTo: {
183
+ type: Boolean as PropType<VxeModalPropTypes.IsWithinAppendTo>,
184
+ default: () => getConfig().modal.isWithinAppendTo
185
+ },
174
186
  storage: {
175
187
  type: Boolean as PropType<VxeModalPropTypes.Storage>,
176
188
  default: () => getConfig().modal.storage
@@ -498,14 +510,19 @@ export default /* define-vxe-component start */ defineVxeComponent({
498
510
  const props = $xeModal
499
511
 
500
512
  return $xeModal.$nextTick().then(() => {
501
- const { position } = props
502
- const marginSize = XEUtils.toNumber(props.marginSize)
513
+ const { position, isWithinAppendTo } = props
514
+ const el = $xeModal.$refs.refElem as HTMLDivElement
503
515
  const boxElem = $xeModal.getBox()
504
516
  if (!boxElem) {
505
517
  return
506
518
  }
507
- const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
508
- const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
519
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
520
+ if (!parentWrapperEl) {
521
+ return
522
+ }
523
+ const clientVisibleWidth = parentWrapperEl.clientWidth
524
+ const clientVisibleHeight = parentWrapperEl.clientHeight
525
+ const marginSize = XEUtils.toNumber(props.marginSize)
509
526
  const isPosCenter = position === 'center'
510
527
  const { top, left } = XEUtils.isString(position) ? { top: position, left: position } : Object.assign({}, position)
511
528
  const topCenter = isPosCenter || top === 'center'
@@ -717,8 +734,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
717
734
  },
718
735
  handleMinimize () {
719
736
  const $xeModal = this
737
+ const props = $xeModal
720
738
  const reactData = $xeModal.reactData
721
739
 
740
+ const { isWithinAppendTo } = props
722
741
  const zoomOpts = $xeModal.computeZoomOpts
723
742
  const { minimizeLayout, minimizeMaxSize, minimizeHorizontalOffset, minimizeVerticalOffset, minimizeOffsetMethod } = zoomOpts
724
743
  const isHorizontalLayout = minimizeLayout === 'horizontal'
@@ -751,6 +770,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
751
770
  reactData.prevZoomStatus = prevZoomStatus
752
771
  reactData.zoomStatus = 'minimize'
753
772
  return $xeModal.$nextTick().then(() => {
773
+ const el = $xeModal.$refs.refElem as HTMLDivElement
754
774
  const boxElem = $xeModal.getBox()
755
775
  if (!boxElem) {
756
776
  return {
@@ -763,7 +783,13 @@ export default /* define-vxe-component start */ defineVxeComponent({
763
783
  status: false
764
784
  }
765
785
  }
766
- const { visibleHeight } = getDomNode()
786
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
787
+ if (!parentWrapperEl) {
788
+ return {
789
+ status: false
790
+ }
791
+ }
792
+ const visibleHeight = parentWrapperEl.clientHeight
767
793
  // 如果当前处于复原状态
768
794
  if (!prevZoomStatus) {
769
795
  reactData.revertLocat = {
@@ -825,6 +851,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
825
851
  const props = $xeModal
826
852
  const reactData = $xeModal.reactData
827
853
 
854
+ const { isWithinAppendTo } = props
828
855
  const prevZoomStatus = reactData.zoomStatus
829
856
  reactData.prevZoomStatus = prevZoomStatus
830
857
  reactData.zoomStatus = 'maximize'
@@ -833,9 +860,16 @@ export default /* define-vxe-component start */ defineVxeComponent({
833
860
  if (boxElem) {
834
861
  // 如果当前处于复原状态
835
862
  if (!prevZoomStatus) {
863
+ const el = $xeModal.$refs.refElem as HTMLDivElement
864
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
865
+ if (!parentWrapperEl) {
866
+ return {
867
+ status: false
868
+ }
869
+ }
870
+ const clientVisibleWidth = parentWrapperEl.clientWidth
871
+ const clientVisibleHeight = parentWrapperEl.clientHeight
836
872
  const marginSize = XEUtils.toNumber(props.marginSize)
837
- const clientVisibleWidth = document.documentElement.clientWidth || document.body.clientWidth
838
- const clientVisibleHeight = document.documentElement.clientHeight || document.body.clientHeight
839
873
  reactData.revertLocat = {
840
874
  top: Math.max(marginSize, clientVisibleHeight / 2 - boxElem.offsetHeight / 2),
841
875
  left: Math.max(marginSize, clientVisibleWidth / 2 - boxElem.offsetWidth / 2),
@@ -1115,7 +1149,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1115
1149
  const props = $xeModal
1116
1150
  const reactData = $xeModal.reactData
1117
1151
 
1118
- const { storage } = props
1152
+ const { resize, storage, isWithinAppendTo } = props
1119
1153
  const { zoomStatus } = reactData
1120
1154
  const marginSize = XEUtils.toNumber(props.marginSize)
1121
1155
  const boxElem = $xeModal.getBox()
@@ -1124,9 +1158,15 @@ export default /* define-vxe-component start */ defineVxeComponent({
1124
1158
  }
1125
1159
  if (zoomStatus !== 'maximize' && evnt.button === 0 && !getEventTargetNode(evnt, boxElem, 'trigger--btn').flag) {
1126
1160
  evnt.preventDefault()
1161
+ const el = $xeModal.$refs.refElem as HTMLDivElement
1162
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
1163
+ if (!parentWrapperEl) {
1164
+ return
1165
+ }
1166
+ const visibleWidth = parentWrapperEl.clientWidth - (resize && isWithinAppendTo ? 8 : 0)
1167
+ const visibleHeight = parentWrapperEl.clientHeight - (resize && isWithinAppendTo ? 8 : 0)
1127
1168
  const disX = evnt.clientX - boxElem.offsetLeft
1128
1169
  const disY = evnt.clientY - boxElem.offsetTop
1129
- const { visibleHeight, visibleWidth } = getDomNode()
1130
1170
  document.onmousemove = evnt => {
1131
1171
  evnt.preventDefault()
1132
1172
  const offsetWidth = boxElem.offsetWidth
@@ -1176,8 +1216,14 @@ export default /* define-vxe-component start */ defineVxeComponent({
1176
1216
  const reactData = $xeModal.reactData
1177
1217
 
1178
1218
  evnt.preventDefault()
1179
- const { storage } = props
1180
- const { visibleHeight, visibleWidth } = getDomNode()
1219
+ const { resize, storage, isWithinAppendTo } = props
1220
+ const el = $xeModal.$refs.refElem as HTMLDivElement
1221
+ const parentWrapperEl = getPopupWrapperElement(isWithinAppendTo ? el : document.body)
1222
+ if (!parentWrapperEl) {
1223
+ return
1224
+ }
1225
+ const visibleWidth = parentWrapperEl.clientWidth - (resize && isWithinAppendTo ? 8 : 0)
1226
+ const visibleHeight = parentWrapperEl.clientHeight - (resize && isWithinAppendTo ? 8 : 0)
1181
1227
  const marginSize = XEUtils.toNumber(props.marginSize)
1182
1228
  const targetElem = evnt.target as HTMLSpanElement
1183
1229
  const type = targetElem.getAttribute('data-type')
@@ -1562,7 +1608,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1562
1608
  const slots = $xeModal.$scopedSlots
1563
1609
  const reactData = $xeModal.reactData
1564
1610
 
1565
- const { slots: propSlots = {}, className, type, animat, draggable, iconStatus, position, loading, destroyOnClose, status, lockScroll, padding, lockView, mask, resize } = props
1611
+ const { border, showTitleBackground, slots: propSlots = {}, className, type, animat, draggable, iconStatus, position, loading, destroyOnClose, status, lockScroll, padding, lockView, mask, resize, isWithinAppendTo } = props
1566
1612
  const { initialized, modalTop, contentVisible, visible, zoomStatus } = reactData
1567
1613
  const asideSlot = slots.aside || propSlots.aside
1568
1614
  const vSize = $xeModal.computeSize
@@ -1575,10 +1621,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
1575
1621
  }
1576
1622
  return h('div', {
1577
1623
  ref: 'refElem',
1578
- class: ['vxe-modal--wrapper', `type--${type}`, `zoom--${zoomStatus || 'revert'}`, className || '', position ? `pos--${position}` : '', {
1624
+ class: ['vxe-modal--wrapper', `type--${type}`, `zoom--${zoomStatus || 'revert'}`, className || '', position ? `pos--${position}` : '', isWithinAppendTo ? 'ctx--within' : 'ctx--free', {
1579
1625
  [`size--${vSize}`]: vSize,
1580
1626
  [`status--${status}`]: status,
1581
1627
  'is--padding': padding,
1628
+ 'is--border': border,
1629
+ 'is--title-bg': showTitleBackground,
1582
1630
  'is--animat': animat,
1583
1631
  'lock--scroll': lockScroll,
1584
1632
  'lock--view': lockView,
@@ -148,6 +148,8 @@ setConfig({
148
148
  // useHtml: false,
149
149
  position: 'right',
150
150
  showHeader: true,
151
+ // showTitleBackground: false,
152
+ border: true,
151
153
  lockView: true,
152
154
  mask: true,
153
155
  showTitleOverflow: true,
@@ -258,6 +260,8 @@ setConfig({
258
260
  // size: null,
259
261
  top: 16,
260
262
  showHeader: true,
263
+ // showTitleBackground: false,
264
+ border: true,
261
265
  // useHtml: false,
262
266
  // width: null,
263
267
  // height: null,
@@ -202,8 +202,7 @@ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined
202
202
  const stys: Record<string, string> = {}
203
203
  if (panelElem && targetElem) {
204
204
  const bodyEl = document.body
205
- const parentEl = panelElem.parentElement
206
- const parentWrapperEl = parentEl === bodyEl ? document.documentElement : parentEl
205
+ const parentWrapperEl = getPopupWrapperElement(panelElem)
207
206
  if (parentWrapperEl) {
208
207
  const targetWidth = targetElem.offsetWidth
209
208
  const targetHeight = targetElem.offsetHeight
@@ -328,6 +327,15 @@ export function updatePanelPlacement (targetElem: HTMLElement | null | undefined
328
327
  }
329
328
  }
330
329
 
330
+ export function getPopupWrapperElement (panelElem: HTMLElement | null | undefined) {
331
+ if (!panelElem) {
332
+ return null
333
+ }
334
+ const bodyEl = document.body
335
+ const parentEl = panelElem.parentElement
336
+ return (parentEl === bodyEl ? document.documentElement : parentEl) || null
337
+ }
338
+
331
339
  export function getPopupContainer (appendTo: string | HTMLElement | ((params: any) => string | HTMLElement) | undefined) {
332
340
  const selectElem = appendTo && XEUtils.isFunction(appendTo) ? appendTo({}) : appendTo
333
341
  return selectElem || 'body'
@@ -1,6 +1,34 @@
1
1
  @use '../helpers/baseMixin.scss';
2
2
  @use '../helpers/placement.scss';
3
3
 
4
+ // 局部变量
5
+ .vxe-color-picker,
6
+ .vxe-color-picker--readonly,
7
+ .vxe-color-picker--panel {
8
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-default);
9
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-default);
10
+ &.size--xlarge {
11
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-xlarge);
12
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-xlarge);
13
+ }
14
+ &.size--large {
15
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-large);
16
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-large);
17
+ }
18
+ &.size--medium {
19
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-medium);
20
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-medium);
21
+ }
22
+ &.size--small {
23
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-small);
24
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-small);
25
+ }
26
+ &.size--mini {
27
+ --vxe-ui-color-picker-current-font-size: var(--vxe-ui-font-size-mini);
28
+ --vxe-ui-color-picker-current-height: var(--vxe-ui-input-height-mini);
29
+ }
30
+ }
31
+
4
32
  .vxe-color-picker {
5
33
  &.is--selected {
6
34
  .vxe-color-picker--inner-color {
@@ -24,8 +52,10 @@
24
52
 
25
53
  .vxe-color-picker--inner,
26
54
  .vxe-color-picker--preview-btn,
27
- .vxe-color-picker--bar-alpha-slider {
28
- background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAWElEQVRIiWM8fubkfwYygKWJOSM5+mCAhRLNoxaPWjxq8ajFoxbTyeL/DAfJ0Xjs3Cl7Siwmu4Yht1aDgZEYx6MWj1o8avGoxaMWD3qLya5X//4nqx6HAQC7RBGFzolqTAAAAABJRU5ErkJggg==);
55
+ .vxe-color-picker--bar-alpha-slider,
56
+ .vxe-color-picker--readonly-color.is--empty {
57
+ background-color: #ffffff;
58
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAWElEQVRIiWM8fubkfwYygKWJOSM5+mCAhRLNoxaPWjxq8ajFoxbTyeL/DAfJ0Xjs3Cl7Siwmu4Yht1aDgZEYx6MWj1o8avGoxaMWD3qLya5X//4nqx6HAQC7RBGFzolqTAAAAABJRU5ErkJggg==);
29
59
  }
30
60
 
31
61
  .vxe-color-picker--inner,
@@ -378,33 +408,12 @@
378
408
 
379
409
  .vxe-color-picker,
380
410
  .vxe-color-picker--readonly {
381
- height: var(--vxe-ui-input-height-default);
382
- line-height: var(--vxe-ui-input-height-default);
383
- &.size--medium {
384
- height: var(--vxe-ui-input-height-medium);
385
- line-height: var(--vxe-ui-input-height-medium);
386
- }
387
- &.size--small {
388
- height: var(--vxe-ui-input-height-small);
389
- line-height: var(--vxe-ui-input-height-small);
390
- }
391
- &.size--mini {
392
- height: var(--vxe-ui-input-height-mini);
393
- line-height: var(--vxe-ui-input-height-mini);
394
- }
411
+ height: var(--vxe-ui-color-picker-current-height);
412
+ line-height: var(--vxe-ui-color-picker-current-height);
395
413
  }
396
414
 
397
415
  .vxe-color-picker,
398
416
  .vxe-color-picker--readonly,
399
417
  .vxe-color-picker--panel {
400
- font-size: var(--vxe-ui-font-size-default);
401
- &.size--medium {
402
- font-size: var(--vxe-ui-font-size-medium);
403
- }
404
- &.size--small {
405
- font-size: var(--vxe-ui-font-size-small);
406
- }
407
- &.size--mini {
408
- font-size: var(--vxe-ui-font-size-mini);
409
- }
418
+ font-size: var(--vxe-ui-color-picker-current-font-size);
410
419
  }
@@ -128,7 +128,6 @@
128
128
  flex-direction: row;
129
129
  position: fixed;
130
130
  background-color: var(--vxe-ui-layout-background-color);
131
- border: 1px solid var(--vxe-ui-base-popup-border-color);
132
131
  text-align: left;
133
132
  pointer-events: auto;
134
133
  opacity: 0;
@@ -204,7 +203,6 @@
204
203
  flex-shrink: 0;
205
204
  font-size: 1.1em;
206
205
  font-weight: 700;
207
- border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
208
206
  &.is--ellipsis {
209
207
  .vxe-drawer--header-title {
210
208
  overflow: hidden;
@@ -213,6 +211,21 @@
213
211
  }
214
212
  }
215
213
  }
214
+ .vxe-drawer--wrapper {
215
+ &.is--title-bg {
216
+ .vxe-drawer--header {
217
+ background-color: var(--vxe-ui-drawer-header-background-color);
218
+ }
219
+ }
220
+ &.is--border {
221
+ .vxe-drawer--header {
222
+ border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
223
+ }
224
+ .vxe-drawer--box {
225
+ border: 1px solid var(--vxe-ui-base-popup-border-color);
226
+ }
227
+ }
228
+ }
216
229
  .vxe-drawer--header-title {
217
230
  flex-grow: 1;
218
231
  padding: 0.6em 0 0.6em 1em;
@@ -13,7 +13,6 @@ html[data-vxe-lock-scroll] {
13
13
  width: 420px;
14
14
  background-color: var(--vxe-ui-layout-background-color);
15
15
  border-radius: var(--vxe-ui-base-border-radius);
16
- border: 1px solid var(--vxe-ui-base-popup-border-color);
17
16
  text-align: left;
18
17
  pointer-events: auto;
19
18
  opacity: 0;
@@ -215,15 +214,48 @@ html[data-vxe-lock-scroll] {
215
214
 
216
215
  .vxe-modal--wrapper {
217
216
  display: none;
218
- position: fixed;
219
217
  top: 0;
220
218
  left: 0;
221
219
  line-height: 1.5;
222
- width: calc(100% + 18px);
223
- height: calc(100% + 18px);
224
220
  color: var(--vxe-ui-font-color);
225
221
  font-family: var(--vxe-ui-font-family);
226
222
  outline: 0;
223
+ &.ctx--free {
224
+ width: calc(100% + 18px);
225
+ height: calc(100% + 18px);
226
+ position: fixed;
227
+ &.lock--view,
228
+ &.is--mask {
229
+ &:before {
230
+ position: fixed;
231
+ }
232
+ }
233
+ &.type--modal,
234
+ &.type--alert,
235
+ &.type--confirm {
236
+ .vxe-modal--box {
237
+ position: fixed;
238
+ }
239
+ }
240
+ }
241
+ &.ctx--within {
242
+ width: 100%;
243
+ height: 100%;
244
+ position: absolute;
245
+ &.lock--view,
246
+ &.is--mask {
247
+ &:before {
248
+ position: absolute;
249
+ }
250
+ }
251
+ &.type--modal,
252
+ &.type--alert,
253
+ &.type--confirm {
254
+ .vxe-modal--box {
255
+ position: absolute;
256
+ }
257
+ }
258
+ }
227
259
  &.is--active {
228
260
  display: block;
229
261
  }
@@ -303,7 +335,6 @@ html[data-vxe-lock-scroll] {
303
335
  &.is--mask {
304
336
  &:before {
305
337
  content: "";
306
- position: fixed;
307
338
  top: 0;
308
339
  left: 0;
309
340
  width: 100%;
@@ -398,18 +429,26 @@ html[data-vxe-lock-scroll] {
398
429
  &.type--modal,
399
430
  &.type--alert,
400
431
  &.type--confirm {
432
+ &.is--title-bg {
433
+ .vxe-modal--header {
434
+ background-color: var(--vxe-ui-modal-header-background-color);
435
+ }
436
+ }
437
+ &.is--border {
438
+ .vxe-modal--header {
439
+ border-bottom: 1px solid var(--vxe-ui-input-border-color);
440
+ }
441
+ .vxe-modal--box {
442
+ border: 1px solid var(--vxe-ui-base-popup-border-color);
443
+ }
444
+ }
401
445
  .vxe-modal--box {
402
446
  display: flex;
403
447
  flex-direction: row;
404
- position: fixed;
405
448
  left: 50%;
406
449
  top: 0;
407
450
  box-shadow: var(--vxe-ui-base-popup-box-shadow);
408
451
  }
409
- .vxe-modal--header {
410
- border-bottom: 1px solid var(--vxe-ui-input-border-color);
411
- background-color: var(--vxe-ui-modal-header-background-color);
412
- }
413
452
  .vxe-modal--body {
414
453
  overflow: auto;
415
454
  .vxe-modal--content {
@@ -66,8 +66,11 @@
66
66
  /*number-input*/
67
67
  --vxe-ui-number-input-control-button-color: #262727;
68
68
 
69
+ /*drawer*/
70
+ --vxe-ui-drawer-header-background-color: rgba(123, 123, 123, 0.1);
71
+
69
72
  /*modal*/
70
- --vxe-ui-modal-header-background-color: var(--vxe-ui-layout-background-color);
73
+ --vxe-ui-modal-header-background-color: rgba(123, 123, 123, 0.1);
71
74
 
72
75
  /*tabs*/
73
76
  --vxe-ui-tabs-card-header-background-color: #1d1e1f;
@@ -65,6 +65,9 @@
65
65
  /*number-input*/
66
66
  --vxe-ui-number-input-control-button-color: #f5f7fa;
67
67
 
68
+ /*drawer*/
69
+ --vxe-ui-drawer-header-background-color: #{light_variable.$vxe-ui-drawer-header-background-color};
70
+
68
71
  /*modal*/
69
72
  --vxe-ui-modal-header-background-color: #{light_variable.$vxe-ui-modal-header-background-color};
70
73
 
@@ -58,6 +58,9 @@ $vxe-ui-input-border-color: #dcdfe6 !default;
58
58
  $vxe-ui-input-placeholder-color: #C0C4CC !default;
59
59
  $vxe-ui-input-disabled-background-color: #f3f3f3 !default;
60
60
 
61
+ /*drawer*/
62
+ $vxe-ui-drawer-header-background-color: #F8F8F8 !default;
63
+
61
64
  /*modal*/
62
65
  $vxe-ui-modal-header-background-color: #F8F8F8 !default;
63
66
 
@@ -31,6 +31,7 @@ export namespace VxeDrawerPropTypes {
31
31
  export type ModelValue = boolean
32
32
  export type ID = string | null
33
33
  export type Loading = boolean
34
+ export type Border = boolean
34
35
  export type ClassName = string
35
36
  export type Position = DrawerPosition
36
37
  export type Title = string | number
@@ -54,6 +55,7 @@ export namespace VxeDrawerPropTypes {
54
55
  export type Width = number | string
55
56
  export type Height = number | string
56
57
  export type Resize = boolean
58
+ export type ShowTitleBackground = boolean
57
59
  export type ZIndex = number
58
60
  export type DestroyOnClose = boolean
59
61
  export type ShowTitleOverflow = boolean
@@ -69,6 +71,7 @@ export interface VxeDrawerProps {
69
71
  value?: VxeDrawerPropTypes.ModelValue
70
72
  id?: VxeDrawerPropTypes.ID
71
73
  loading?: VxeDrawerPropTypes.Loading
74
+ border?: VxeDrawerPropTypes.Border
72
75
  className?: VxeDrawerPropTypes.ClassName
73
76
  position?: VxeDrawerPropTypes.Position
74
77
  title?: VxeDrawerPropTypes.Title
@@ -85,6 +88,7 @@ export interface VxeDrawerProps {
85
88
  escClosable?: VxeDrawerPropTypes.EscClosable
86
89
  cancelClosable?: VxeDrawerPropTypes.CancelClosable
87
90
  confirmClosable?: VxeDrawerPropTypes.ConfirmClosable
91
+ showTitleBackground?: VxeDrawerPropTypes.ShowTitleBackground
88
92
  showHeader?: VxeDrawerPropTypes.ShowHeader
89
93
  showFooter?: VxeDrawerPropTypes.ShowFooter
90
94
  showClose?: VxeDrawerPropTypes.ShowClose
@@ -44,6 +44,7 @@ export namespace VxeModalPropTypes {
44
44
  export type Loading = boolean
45
45
  export type Status = ModalStatus
46
46
  export type IconStatus = string
47
+ export type Border = boolean
47
48
  export type ClassName = string
48
49
  export type Top = number | string
49
50
  export type Position = 'center' | 'top-left' | 'top-right' | ModalPosition
@@ -68,6 +69,7 @@ export namespace VxeModalPropTypes {
68
69
  export type CancelClosable = boolean
69
70
  export type ConfirmClosable = boolean
70
71
  export type Resize = boolean
72
+ export type ShowTitleBackground = boolean
71
73
  export type ShowHeader = boolean
72
74
  export type ShowFooter = boolean
73
75
  export type ShowZoom = boolean
@@ -109,6 +111,7 @@ export namespace VxeModalPropTypes {
109
111
  export type ShowTitleOverflow = boolean
110
112
  export type Transfer = boolean
111
113
  export type AppendTo = string | HTMLElement | ((params: {}) => string | HTMLElement)
114
+ export type IsWithinAppendTo = boolean
112
115
  export type Storage = boolean
113
116
  export type StorageKey = string
114
117
  export type Animat = boolean
@@ -127,6 +130,7 @@ export interface VxeModalProps {
127
130
  loading?: VxeModalPropTypes.Loading
128
131
  status?: VxeModalPropTypes.Status
129
132
  iconStatus?: VxeModalPropTypes.IconStatus
133
+ border?: VxeModalPropTypes.Border
130
134
  className?: VxeModalPropTypes.ClassName
131
135
  top?: VxeModalPropTypes.Top
132
136
  position?: VxeModalPropTypes.Position
@@ -146,6 +150,7 @@ export interface VxeModalProps {
146
150
  cancelClosable?: VxeModalPropTypes.CancelClosable
147
151
  confirmClosable?: VxeModalPropTypes.ConfirmClosable
148
152
  resize?: VxeModalPropTypes.Resize
153
+ showTitleBackground?: VxeModalPropTypes.ShowTitleBackground
149
154
  showHeader?: VxeModalPropTypes.ShowHeader
150
155
  showFooter?: VxeModalPropTypes.ShowFooter
151
156
  showZoom?: VxeModalPropTypes.ShowZoom
@@ -174,6 +179,10 @@ export interface VxeModalProps {
174
179
  * 挂载到指定元素下
175
180
  */
176
181
  appendTo?: VxeModalPropTypes.AppendTo
182
+ /**
183
+ * 是否在指定元素 append-to 的范围内显示
184
+ */
185
+ isWithinAppendTo?: VxeModalPropTypes.IsWithinAppendTo
177
186
  storage?: VxeModalPropTypes.Storage
178
187
  storageKey?: VxeModalPropTypes.StorageKey
179
188
  animat?: VxeModalPropTypes.Animat