|
1 | 1 | <template> |
2 | 2 | <!-- Size & interactivity come from parent classes --> |
3 | | - <div class="scribble-badge relative isolate grid place-items-center"> |
| 3 | + <div class="scribble-badge relative isolate grid place-items-center" :style="cssVars"> |
4 | 4 | <!-- Put your number (or any content) here --> |
5 | 5 | <slot>0</slot> |
6 | 6 | </div> |
7 | 7 | </template> |
8 | 8 |
|
9 | 9 | <script setup> |
10 | | -// no props needed — style via classes on the component usage |
| 10 | +const props = defineProps({ |
| 11 | + maskUrl: { |
| 12 | + type: String, |
| 13 | + default: 'pattern-square.svg' |
| 14 | + } |
| 15 | +}); |
| 16 | +
|
| 17 | +const { app } = useRuntimeConfig(); |
| 18 | +const baseURL = app.baseURL || '/'; |
| 19 | +
|
| 20 | +// Construct the full pattern URL |
| 21 | +const fullMaskPath = props.maskUrl.startsWith('http') || props.maskUrl.startsWith('/') |
| 22 | + ? props.maskUrl |
| 23 | + : `${baseURL}images/${props.maskUrl}`.replace(/\/+/g, '/'); |
| 24 | +
|
| 25 | +const patternUrl = `${baseURL}images/pattern-square.svg`.replace(/\/+/g, '/'); |
| 26 | +
|
| 27 | +const cssVars = { |
| 28 | + '--pattern-url': `url("${patternUrl}")`, |
| 29 | + '--mask-url': `url("${fullMaskPath}")` |
| 30 | +}; |
11 | 31 | </script> |
12 | 32 |
|
13 | 33 | <style scoped> |
14 | 34 | /* Apply the mask to the host element so regular backgrounds get clipped too */ |
15 | 35 | .scribble-badge { |
16 | | - -webkit-mask-image: var(--mask-url, url("/website/images/pattern-square.svg")); |
17 | | - mask-image: var(--mask-url, url("/website/images/pattern-square.svg")); |
| 36 | + -webkit-mask-image: var(--mask-url, var(--pattern-url)); |
| 37 | + mask-image: var(--mask-url, var(--pattern-url)); |
18 | 38 | -webkit-mask-repeat: no-repeat; |
19 | 39 | mask-repeat: no-repeat; |
20 | 40 | -webkit-mask-position: var(--mask-position, center); |
|
32 | 52 | pointer-events: none; |
33 | 53 |
|
34 | 54 | /* Mask shape (user can override URL via a CSS var) */ |
35 | | - -webkit-mask-image: var(--mask-url, url("/website/images/pattern-square.svg")); |
36 | | - mask-image: var(--mask-url, url("/website/images/pattern-square.svg")); |
| 55 | + -webkit-mask-image: var(--mask-url, var(--pattern-url)); |
| 56 | + mask-image: var(--mask-url, var(--pattern-url)); |
37 | 57 | -webkit-mask-repeat: no-repeat; |
38 | 58 | mask-repeat: no-repeat; |
39 | 59 | -webkit-mask-position: var(--mask-position, center); |
|
0 commit comments