Mask.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  10. var _react = _interopRequireDefault(require("react"));
  11. var _classnames = _interopRequireDefault(require("classnames"));
  12. var _portal = _interopRequireDefault(require("@rc-component/portal"));
  13. var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
  14. var COVER_PROPS = {
  15. fill: 'transparent',
  16. pointerEvents: 'auto'
  17. };
  18. var Mask = function Mask(props) {
  19. var prefixCls = props.prefixCls,
  20. rootClassName = props.rootClassName,
  21. pos = props.pos,
  22. showMask = props.showMask,
  23. _props$style = props.style,
  24. style = _props$style === void 0 ? {} : _props$style,
  25. _props$fill = props.fill,
  26. fill = _props$fill === void 0 ? "rgba(0,0,0,0.5)" : _props$fill,
  27. open = props.open,
  28. animated = props.animated,
  29. zIndex = props.zIndex,
  30. disabledInteraction = props.disabledInteraction;
  31. var id = (0, _useId.default)();
  32. var maskId = "".concat(prefixCls, "-mask-").concat(id);
  33. var mergedAnimated = (0, _typeof2.default)(animated) === 'object' ? animated === null || animated === void 0 ? void 0 : animated.placeholder : animated;
  34. var isSafari = typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
  35. var maskRectSize = isSafari ? {
  36. width: '100%',
  37. height: '100%'
  38. } : {
  39. width: '100vw',
  40. height: '100vh'
  41. };
  42. return /*#__PURE__*/_react.default.createElement(_portal.default, {
  43. open: open,
  44. autoLock: true
  45. }, /*#__PURE__*/_react.default.createElement("div", {
  46. className: (0, _classnames.default)("".concat(prefixCls, "-mask"), rootClassName),
  47. style: (0, _objectSpread2.default)({
  48. position: 'fixed',
  49. left: 0,
  50. right: 0,
  51. top: 0,
  52. bottom: 0,
  53. zIndex: zIndex,
  54. pointerEvents: pos && !disabledInteraction ? 'none' : 'auto'
  55. }, style)
  56. }, showMask ? /*#__PURE__*/_react.default.createElement("svg", {
  57. style: {
  58. width: '100%',
  59. height: '100%'
  60. }
  61. }, /*#__PURE__*/_react.default.createElement("defs", null, /*#__PURE__*/_react.default.createElement("mask", {
  62. id: maskId
  63. }, /*#__PURE__*/_react.default.createElement("rect", (0, _extends2.default)({
  64. x: "0",
  65. y: "0"
  66. }, maskRectSize, {
  67. fill: "white"
  68. })), pos && /*#__PURE__*/_react.default.createElement("rect", {
  69. x: pos.left,
  70. y: pos.top,
  71. rx: pos.radius,
  72. width: pos.width,
  73. height: pos.height,
  74. fill: "black",
  75. className: mergedAnimated ? "".concat(prefixCls, "-placeholder-animated") : ''
  76. }))), /*#__PURE__*/_react.default.createElement("rect", {
  77. x: "0",
  78. y: "0",
  79. width: "100%",
  80. height: "100%",
  81. fill: fill,
  82. mask: "url(#".concat(maskId, ")")
  83. }), pos && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("rect", (0, _extends2.default)({}, COVER_PROPS, {
  84. x: "0",
  85. y: "0",
  86. width: "100%",
  87. height: pos.top
  88. })), /*#__PURE__*/_react.default.createElement("rect", (0, _extends2.default)({}, COVER_PROPS, {
  89. x: "0",
  90. y: "0",
  91. width: pos.left,
  92. height: "100%"
  93. })), /*#__PURE__*/_react.default.createElement("rect", (0, _extends2.default)({}, COVER_PROPS, {
  94. x: "0",
  95. y: pos.top + pos.height,
  96. width: "100%",
  97. height: "calc(100vh - ".concat(pos.top + pos.height, "px)")
  98. })), /*#__PURE__*/_react.default.createElement("rect", (0, _extends2.default)({}, COVER_PROPS, {
  99. x: pos.left + pos.width,
  100. y: "0",
  101. width: "calc(100vw - ".concat(pos.left + pos.width, "px)"),
  102. height: "100%"
  103. })))) : null));
  104. };
  105. var _default = Mask;
  106. exports.default = _default;