<!--
 * @Description: 
 * @Author: ZXD
 * @Date: 2022-09-13 14:41:50
 * @LastEditTime: 2022-09-15 13:46:54
 * @LastEditors:  
-->
<template>
  <s-transition
    :show="show"
    custom-class="s-overlay"
    :duration="duration"
    :custom-style="overlayStyle"
    :style="{backdropFilter: backdropFilter ? 'blur(10rpx)' : 'blur(0rpx)',}"
    @click="clickHandler"
  >
    <slot />
  </s-transition>
</template>

<script>
import props from './props.js'

/**
 * overlay 遮罩
 * @description 创建一个遮罩层，用于强调特定的页面元素，并阻止用户对遮罩下层的内容进行操作，一般用于弹窗场景
 * @tutorial https://www.uviewui.com/components/overlay.html
 * @property {Boolean}			show		是否显示遮罩（默认 false ）
 * @property {String | Number}	zIndex		zIndex 层级（默认 10070 ）
 * @property {String | Number}	duration	动画时长，单位毫秒（默认 300 ）
 * @property {String | Number}	opacity		不透明度值，当做rgba的第四个参数 （默认 0.4 ）
 * @property {Object}			customStyle	定义需要用到的外部样式
 * @event {Function} click 点击遮罩发送事件
 * @example <s-overlay :show="show" @click="show = false"></s-overlay>
 */
export default {
  name: 's-overlay',
  mixins: [uni.$s.mpMixin, uni.$s.mixin, props],
  computed: {
    overlayStyle() {
      const style = {
        position: 'fixed',
        top: 0,
        left: 0,
        right: 0,
        zIndex: this.zIndex,
        bottom: 0,
        'background-color': `rgba(0, 0, 0, ${this.opacity})`,
      }
      return uni.$s.deepMerge(style, uni.$s.addStyle(this.customStyle))
    },
  },
  methods: {
    clickHandler() {
      this.$emit('click')
    },
  },
}
</script>

<style lang="scss" scoped>
@import '../../libs/css/components.scss';
$s-overlay-top: 0 !default;
$s-overlay-left: 0 !default;
$s-overlay-width: 100% !default;
$s-overlay-height: 100% !default;
$s-overlay-background-color: rgba(0, 0, 0, 0.7) !default;
.s-overlay {
  position: fixed;
  top: $s-overlay-top;
  left: $s-overlay-left;
  width: $s-overlay-width;
  height: $s-overlay-height;
  background-color: $s-overlay-background-color;
}
</style>
