Mask.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  10. var _useId = _interopRequireDefault(require("../_util/hooks/useId"));
  11. var _PortalWrapper = _interopRequireDefault(require("../_util/PortalWrapper"));
  12. var _type = require("../_util/type");
  13. const COVER_PROPS = {
  14. fill: 'transparent',
  15. 'pointer-events': 'auto'
  16. };
  17. const Mask = (0, _vue.defineComponent)({
  18. name: 'TourMask',
  19. props: {
  20. prefixCls: {
  21. type: String
  22. },
  23. pos: (0, _type.objectType)(),
  24. rootClassName: {
  25. type: String
  26. },
  27. showMask: (0, _type.booleanType)(),
  28. fill: {
  29. type: String,
  30. default: 'rgba(0,0,0,0.5)'
  31. },
  32. open: (0, _type.booleanType)(),
  33. animated: (0, _type.someType)([Boolean, Object]),
  34. zIndex: {
  35. type: Number
  36. }
  37. },
  38. setup(props, _ref) {
  39. let {
  40. attrs
  41. } = _ref;
  42. const id = (0, _useId.default)();
  43. return () => {
  44. const {
  45. prefixCls,
  46. open,
  47. rootClassName,
  48. pos,
  49. showMask,
  50. fill,
  51. animated,
  52. zIndex
  53. } = props;
  54. const maskId = `${prefixCls}-mask-${id}`;
  55. const mergedAnimated = typeof animated === 'object' ? animated === null || animated === void 0 ? void 0 : animated.placeholder : animated;
  56. return (0, _vue.createVNode)(_PortalWrapper.default, {
  57. "visible": open,
  58. "autoLock": true
  59. }, {
  60. default: () => open && (0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  61. "class": (0, _classNames.default)(`${prefixCls}-mask`, rootClassName, attrs.class),
  62. "style": [{
  63. position: 'fixed',
  64. left: 0,
  65. right: 0,
  66. top: 0,
  67. bottom: 0,
  68. zIndex,
  69. pointerEvents: 'none'
  70. }, attrs.style]
  71. }), [showMask ? (0, _vue.createVNode)("svg", {
  72. "style": {
  73. width: '100%',
  74. height: '100%'
  75. }
  76. }, [(0, _vue.createVNode)("defs", null, [(0, _vue.createVNode)("mask", {
  77. "id": maskId
  78. }, [(0, _vue.createVNode)("rect", {
  79. "x": "0",
  80. "y": "0",
  81. "width": "100vw",
  82. "height": "100vh",
  83. "fill": "white"
  84. }, null), pos && (0, _vue.createVNode)("rect", {
  85. "x": pos.left,
  86. "y": pos.top,
  87. "rx": pos.radius,
  88. "width": pos.width,
  89. "height": pos.height,
  90. "fill": "black",
  91. "class": mergedAnimated ? `${prefixCls}-placeholder-animated` : ''
  92. }, null)])]), (0, _vue.createVNode)("rect", {
  93. "x": "0",
  94. "y": "0",
  95. "width": "100%",
  96. "height": "100%",
  97. "fill": fill,
  98. "mask": `url(#${maskId})`
  99. }, null), pos && (0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)("rect", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, COVER_PROPS), {}, {
  100. "x": "0",
  101. "y": "0",
  102. "width": "100%",
  103. "height": pos.top
  104. }), null), (0, _vue.createVNode)("rect", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, COVER_PROPS), {}, {
  105. "x": "0",
  106. "y": "0",
  107. "width": pos.left,
  108. "height": "100%"
  109. }), null), (0, _vue.createVNode)("rect", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, COVER_PROPS), {}, {
  110. "x": "0",
  111. "y": pos.top + pos.height,
  112. "width": "100%",
  113. "height": `calc(100vh - ${pos.top + pos.height}px)`
  114. }), null), (0, _vue.createVNode)("rect", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, COVER_PROPS), {}, {
  115. "x": pos.left + pos.width,
  116. "y": "0",
  117. "width": `calc(100vw - ${pos.left + pos.width}px)`,
  118. "height": "100%"
  119. }), null)])]) : null])
  120. });
  121. };
  122. }
  123. });
  124. var _default = exports.default = Mask;