|
| 1 | +<script setup> |
| 2 | +import { computed } from 'vue' |
| 3 | +import { resolveColor } from '../layoutHelper' |
| 4 | +const props = defineProps({ |
| 5 | + shape: { |
| 6 | + type: String, |
| 7 | + default: 's-s-2-0', |
| 8 | + }, |
| 9 | + color: { |
| 10 | + type: String, |
| 11 | + default: 'white', |
| 12 | + }, |
| 13 | + size: { |
| 14 | + type: String, |
| 15 | + default: '150px', // Default width in pixels |
| 16 | + }, |
| 17 | + custom: { |
| 18 | + // add a custom class if you want |
| 19 | + type: String, |
| 20 | + default: '', |
| 21 | + }, |
| 22 | +}) |
| 23 | +
|
| 24 | +// - |
| 25 | +// - s-d-3-10 |
| 26 | +// color: scheme |
| 27 | +// width: |
| 28 | +
|
| 29 | +// - square vs rounded vs full |
| 30 | +// - dashed, solid, no border |
| 31 | +// - border width |
| 32 | +// - fill opacity |
| 33 | +
|
| 34 | +// - fill color |
| 35 | +// - border color |
| 36 | +// - size |
| 37 | +
|
| 38 | +const size = computed(() => { |
| 39 | + return props.size |
| 40 | +}) |
| 41 | +const borderwidth = computed(() => { |
| 42 | + return props.shape.split('-')[2] + 'px' |
| 43 | +}) |
| 44 | +const borderstyle = computed(() => { |
| 45 | + let parts = props.shape.split('-') |
| 46 | + if (parts[1] == 'd') { |
| 47 | + return 'dashed' |
| 48 | + } else if (parts[1] == 'o') { |
| 49 | + return 'dotted' |
| 50 | + } else if (parts[1] == 's') { |
| 51 | + return 'solid' |
| 52 | + } else { |
| 53 | + return 'none' |
| 54 | + } |
| 55 | +}) |
| 56 | +
|
| 57 | +const style = computed(() => { |
| 58 | + let s = '' |
| 59 | + let parts = props.shape.split('-') |
| 60 | + console.log(parts) |
| 61 | + console.log(parts[0]) |
| 62 | + // no validation currently! |
| 63 | +
|
| 64 | + // square versus rounded vs full |
| 65 | + if (parts[0] == 'r') { |
| 66 | + s += 'rounded-lg ' |
| 67 | + } else if (parts[0] == 'f') { |
| 68 | + s += 'rounded-full ' |
| 69 | + } else { |
| 70 | + s += 'rounded-none ' |
| 71 | + } |
| 72 | +
|
| 73 | + // color scheme |
| 74 | + s += `neversink-${props.color}-scheme binder ` |
| 75 | +
|
| 76 | + // add custom class |
| 77 | + s += props.custom |
| 78 | +
|
| 79 | + // bg opacity |
| 80 | + s += ` opacity-${parts[3]} ` |
| 81 | +
|
| 82 | + console.log(s) |
| 83 | + return s |
| 84 | +}) |
| 85 | +
|
| 86 | +const trans = computed(() => { |
| 87 | + const val = 100 - parseInt(props.shape.split('-')[3]) |
| 88 | + return `${val}%` |
| 89 | +}) |
| 90 | +</script> |
| 91 | +<template> |
| 92 | + <div :class="style"><slot></slot></div> |
| 93 | +</template> |
| 94 | +<style scoped> |
| 95 | +.binder { |
| 96 | + --new-color: color-mix(in srgb, var(--neversink-bg-color), transparent v-bind(trans)); |
| 97 | + border-color: var(--neversink-border-color); |
| 98 | + background-color: var(--new-color); |
| 99 | + color: var(--neversink-text-color); |
| 100 | + width: v-bind(size); |
| 101 | + height: v-bind(size); |
| 102 | + border-width: v-bind(borderwidth); |
| 103 | + border-style: v-bind(borderstyle); |
| 104 | +} |
| 105 | +</style> |
0 commit comments