|
|
@@ -1,12 +1,11 @@
|
|
|
<script>
|
|
|
- import { createEventDispatcher } from 'svelte';
|
|
|
import { fade } from 'svelte/transition';
|
|
|
|
|
|
/** @typedef {import('../../index.d').Mask} MaskProps */
|
|
|
/** @type {MaskProps} */
|
|
|
let {
|
|
|
visible = false,
|
|
|
- opacity = 0.5,
|
|
|
+ opacity = '0.5',
|
|
|
clickable = false,
|
|
|
inverse = false,
|
|
|
backdropBlur = 'none',
|
|
|
@@ -34,15 +33,15 @@
|
|
|
// Mask background color
|
|
|
const bgClass = {
|
|
|
'0': ' bg-transparent',
|
|
|
- '0.1': ' bg-black/[.1] dark:bg-white/[.1]',
|
|
|
- '0.2': ' bg-black/[.2] dark:bg-white/[.2]',
|
|
|
- '0.3': ' bg-black/[.3] dark:bg-white/[.3]',
|
|
|
- '0.4': ' bg-black/[.4] dark:bg-white/[.4]',
|
|
|
- '0.5': ' bg-black/[.5] dark:bg-white/[.5]',
|
|
|
- '0.6': ' bg-black/[.6] dark:bg-white/[.6]',
|
|
|
- '0.7': ' bg-black/[.7] dark:bg-white/[.7]',
|
|
|
- '0.8': ' bg-black/[.8] dark:bg-white/[.8]',
|
|
|
- '0.9': ' bg-black/[.9] dark:bg-white/[.9]',
|
|
|
+ '0.1': ' bg-black/10 dark:bg-white/10',
|
|
|
+ '0.2': ' bg-black/20 dark:bg-white/20',
|
|
|
+ '0.3': ' bg-black/30 dark:bg-white/30',
|
|
|
+ '0.4': ' bg-black/40 dark:bg-white/40',
|
|
|
+ '0.5': ' bg-black/50 dark:bg-white/50',
|
|
|
+ '0.6': ' bg-black/60 dark:bg-white/60',
|
|
|
+ '0.7': ' bg-black/70 dark:bg-white/70',
|
|
|
+ '0.8': ' bg-black/80 dark:bg-white/80',
|
|
|
+ '0.9': ' bg-black/90 dark:bg-white/90',
|
|
|
'1': ' bg-black dark:bg-white',
|
|
|
};
|
|
|
|
|
|
@@ -50,37 +49,30 @@
|
|
|
// Mask background color reverse color
|
|
|
const bgClassInverse = {
|
|
|
'0': ' bg-transparent',
|
|
|
- '0.1': ' bg-white/[.1] dark:bg-black/[.1]',
|
|
|
- '0.2': ' bg-white/[.2] dark:bg-black/[.2]',
|
|
|
- '0.3': ' bg-white/[.3] dark:bg-black/[.3]',
|
|
|
- '0.4': ' bg-white/[.4] dark:bg-black/[.4]',
|
|
|
- '0.5': ' bg-white/[.5] dark:bg-black/[.5]',
|
|
|
- '0.6': ' bg-white/[.6] dark:bg-black/[.6]',
|
|
|
- '0.7': ' bg-white/[.7] dark:bg-black/[.7]',
|
|
|
- '0.8': ' bg-white/[.8] dark:bg-black/[.8]',
|
|
|
- '0.9': ' bg-white/[.9] dark:bg-black/[.9]',
|
|
|
+ '0.1': ' bg-white/10 dark:bg-black/10',
|
|
|
+ '0.2': ' bg-white/20 dark:bg-black/20',
|
|
|
+ '0.3': ' bg-white/30 dark:bg-black/30',
|
|
|
+ '0.4': ' bg-white/40 dark:bg-black/40',
|
|
|
+ '0.5': ' bg-white/50 dark:bg-black/50',
|
|
|
+ '0.6': ' bg-white/60 dark:bg-black/60',
|
|
|
+ '0.7': ' bg-white/70 dark:bg-black/70',
|
|
|
+ '0.8': ' bg-white/80 dark:bg-black/80',
|
|
|
+ '0.9': ' bg-white/90 dark:bg-black/90',
|
|
|
'1': ' bg-white dark:bg-black',
|
|
|
};
|
|
|
-
|
|
|
- // 点击遮罩派发事件
|
|
|
- // Click mask to dispatch event
|
|
|
- const clickMaskFunc = () => {
|
|
|
- onclickMask && onclickMask?.();
|
|
|
- };
|
|
|
</script>
|
|
|
|
|
|
{#if visible}
|
|
|
- <!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
|
- <!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
|
- <div
|
|
|
+ <button
|
|
|
in:fade|global={{ duration }}
|
|
|
out:fade|global={{ duration: outDuration }}
|
|
|
- onclick={clickMaskFunc}
|
|
|
- class={`fixed w-screen h-screen inset-0${
|
|
|
- inverse ? bgClassInverse[opacity] || bgClassInverse['0.5'] : bgClass[opacity] || bgClass['0.5']
|
|
|
- }${clickable ? ' pointer-events-none' : ''}${backdropBlurClass[backdropBlur] || backdropBlurClass['none']}`}
|
|
|
- style={`z-index:${zIndex};`}
|
|
|
+ onclick={() => onclickMask && onclickMask?.()}
|
|
|
+ class="fixed w-screen h-screen inset-0{inverse
|
|
|
+ ? bgClassInverse[opacity] || bgClassInverse['0.5']
|
|
|
+ : bgClass[opacity] || bgClass['0.5']}{clickable ? ' pointer-events-none' : ''}{backdropBlurClass[backdropBlur] ||
|
|
|
+ backdropBlurClass['none']}"
|
|
|
+ style="z-index:{zIndex}"
|
|
|
>
|
|
|
{@render children?.()}
|
|
|
- </div>
|
|
|
+ </button>
|
|
|
{/if}
|