11<script setup lang="ts">
2+ import { computed } from ' vue' ;
3+
24const props = withDefaults (
35 defineProps <{
46 class? : string ;
57 type? : ' reset' | ' submit' | ' button' | undefined ;
68 disabled? : boolean ;
79 title? : string ;
8- variant? : ' default' | ' ghost' ;
10+ variant? : ' default' | ' ghost' | ' transparent ' ;
911 to? : string ;
1012 target? : string ;
1113 }>(),
1214 {
1315 variant: ' default' ,
1416 target: ' _self' ,
17+ type: ' button' ,
1518 },
1619);
20+
21+ const variantClass = computed (() => {
22+ switch (props .variant ) {
23+ case ' ghost' :
24+ return ' ' ;
25+ case ' transparent' :
26+ return [
27+ ' transition' ,
28+ ' hover:bg-white hover:dark:bg-primary-dark-800' ,
29+ ' focus:outline-none hover:text-gray-900 dark:text-neutral-100' ,
30+ ' hocus:ring-[0.125rem] hover:ring-violet-400 hover:dark:ring-violet-700 focus:ring-white' ,
31+ ' aria-disabled:cursor-not-allowed aria-disabled:hover:ring-neutral-200 aria-disabled:hover:dark:ring-neutral-700 aria-disabled:ring-1 aria-disabled:opacity-60' ,
32+ ' disabled:cursor-not-allowed disabled:hover:ring-neutral-200 disabled:hover:dark:ring-neutral-700 disabled:hover:ring-1 disabled:opacity-60' ,
33+ ].join (' ' );
34+ default :
35+ return [
36+ ' h-10 max-h-full aspect-square rounded-md ' ,
37+ ' p-2 shadow-sm' ,
38+ ' focus:outline-none text-gray-900 dark:text-neutral-100' ,
39+ ' ring-1 ring-neutral-200 dark:ring-neutral-700 hocus:ring-[0.125rem] focus:ring-indigo-400 dark:focus:ring-indigo-500 hover:ring-violet-400 hover:dark:ring-violet-700' ,
40+ ' bg-white dark:bg-primary-dark-800' ,
41+ ' aria-disabled:cursor-not-allowed aria-disabled:hover:ring-neutral-200 aria-disabled:hover:dark:ring-neutral-700 aria-disabled:ring-1 aria-disabled:opacity-60' ,
42+ ' disabled:cursor-not-allowed disabled:hover:ring-neutral-200 disabled:hover:dark:ring-neutral-700 disabled:ring-1 disabled:opacity-60' ,
43+ ].join (' ' );
44+ }
45+ });
1746 </script >
1847
1948<template >
2049 <router-link
2150 v-if =" to"
2251 :to =" to"
23- :class =" `flex items-center justify-center h-10 max-h-full
24- aspect-square rounded-md cursor-pointer focus:outline-none
25- text-gray-900 dark:text-neutral-100
26- ${
27- variant === 'default'
28- ? `p-2 shadow-sm
29- ring-1 ring-neutral-200 dark:ring-neutral-700 hocus:ring-[0.125rem]
30- focus:ring-indigo-400 dark:focus:ring-indigo-500 hover:ring-violet-400 hover:dark:ring-violet-700
31- bg-white dark:bg-primary-dark-800
32- aria-disabled:cursor-not-allowed aria-disabled:hover:ring-neutral-200 aria-disabled:hover:dark:ring-neutral-700 aria-disabled:ring-1 aria-disabled:opacity-60`
33- : ''
34- }
35- ${props.class ?? ''}`"
52+ :class =" ['flex items-center justify-center cursor-pointer', props.class, variantClass]"
3653 :type =" props.type"
3754 :title =" props.title ?? 'Button'"
3855 :aria-disabled =" disabled"
@@ -43,19 +60,7 @@ const props = withDefaults(
4360 </router-link >
4461 <button
4562 v-else
46- :class =" `flex items-center justify-center h-10 max-h-full
47- aspect-square rounded-md cursor-pointer focus:outline-none
48- text-gray-900 dark:text-neutral-100
49- ${
50- variant === 'default'
51- ? `p-2 shadow-sm
52- ring-1 ring-neutral-200 dark:ring-neutral-700 hocus:ring-[0.125rem]
53- focus:ring-indigo-400 dark:focus:ring-indigo-500 hover:ring-violet-400 hover:dark:ring-violet-700
54- bg-white dark:bg-primary-dark-800
55- disabled:cursor-not-allowed disabled:hover:ring-neutral-200 disabled:hover:dark:ring-neutral-700 disabled:ring-1`
56- : ''
57- }
58- ${props.class ?? ''} `"
63+ :class =" ['flex items-center justify-center cursor-pointer', props.class, variantClass]"
5964 :type =" props.type"
6065 :disabled =" props.disabled"
6166 :title =" props.title ?? 'Icon'"
0 commit comments