こんにちは世界

Dot Wrapper

A subtle dotted overlay with adjustable spacing, color, and opacity.

Demo

<script lang="ts">
  import * as Null from "#lib/index.js";
</script>

<Null.DotWrapper />

Dot-Wrapper.svelte

<script lang="ts">
    import type { Snippet } from "svelte";
    import type { HTMLAttributes } from "svelte/elements";

    let {
        dotColor = "#fff",
        dotSize = 1000,
        dotGap = 4,
        dotOpacity = 0.3,
        children,
        class: className = "",
        ...rest
    }: HTMLAttributes<HTMLDivElement> & {
        dotColor?: string;
        dotSize?: number;
        dotGap?: number;
        dotOpacity?: number;
        children?: Snippet;
    } = $props();
</script>

<div {...rest} data-slot="dot-wrapper" class={`dot-wrapper ${className}`}>
    {@render children?.()}

    <div
        aria-hidden="true"
        class="dot-overlay"
        style={`
            opacity: ${dotOpacity};
            mask-image: radial-gradient(
                ${dotSize}px circle at center,
                white,
                transparent
            );
            -webkit-mask-image: radial-gradient(
                ${dotSize}px circle at center,
                white,
                transparent
            );
            background-image: radial-gradient(
                circle,
                ${dotColor} 1px,
                transparent 1px
            );
            background-size: ${dotGap}px ${dotGap}px;
        `}
    ></div>
</div>

<style>
    .dot-wrapper {
        position: relative;
        width: 100%;
        overflow: hidden;
        background: var(--background, transparent);
    }

    .dot-overlay {
        position: absolute;
        inset: 0;
        pointer-events: none;
    }
</style>