Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<script setup lang="ts">
import type { IEntity } from '@/app/interfaces/environment';
interface Props {
entityData: IEntity;
}
defineProps<Props>();
const emit = defineEmits(['changeFontSize']);
const speedDialSizeFont = computed(() => {
return [
{
label: 'Very small',
value: '16',
command: () => emit('changeFontSize', '16')
},
{
label: 'Small',
value: '20',
command: () => emit('changeFontSize', '20')
},
{
label: 'Medium',
value: '24',
command: () => emit('changeFontSize', '24')
},
{
label: 'Large',
value: '40',
command: () => emit('changeFontSize', '40')
},
{
label: 'Extra large',
value: '64',
command: () => emit('changeFontSize', '64')
}
];
});
</script>
<template>
<SpeedDial
v-if="speedDialSizeFont.length"
:model="speedDialSizeFont"
direction="right"
showIcon="pi pi-arrows-h"
pt:root:class="speedDialRoot w-4"
>
<template #button="{ toggleCallback }">
<button
class="border p-6 size-10 rounded-full bg-blue-500 flex items-center justify-center"
>
<p>
<span style="font-size: 1.5rem">T</span><span style="font-size: 1rem">T</span
><span style="font-size: 0.6rem">T</span>
</p>
</button>
</template>
<template #item="{ item, toggleCallback }">
<div
:class="[
'text-md font-semibold bg-opacity-70 -translate-y-4 p-4 border rounded-md border-surface-200 dark:border-surface-700 cursor-pointer',
{
'bg-violet-500': item.label === 'Extra large',
'bg-red-500': item.label === 'Large',
'bg-yellow-500': item.label === 'Medium',
'bg-green-500': item.label === 'Small',
'bg-blue-500': item.label === 'Very small',
'opacity-50 cursor-not-allowed pointer-events-none':
item.value == entityData.font_size
}
]"
@click="toggleCallback"
>
<div class="text-center">
{{ item.label }}
</div>
</div>
</template>
</SpeedDial>
</div>
</template>
<style>
.speedDialRoot {
justify-content: flex-start !important;
}
</style>