<template>
    <DocSectionText v-bind="$attrs">
        <p>
            MeterGroup offers meter customization with the <i>meter</i> template that receives the meter instance from the value as a parameter and also <i>label</i> template receives value instance. In addition, the <i>start</i> and <i>end</i> slots
            are available to define the start and end templating for MeterGroup respectively.
        </p>
    </DocSectionText>
    <div class="card">
        <MeterGroup :value="value" labelPosition="start">
            <template #label="{ value }">
                <div class="flex flex-column text-sm gap-2">
                    <template v-for="(val, i) of value" :key="i">
                        <span :style="{ color: val.color }" class="flex gap-2">
                            <i :class="val.icon" />
                            {{ val.label }} ({{ val.value }}%)</span
                        >
                    </template>
                </div>
            </template>
            <template #start="{ totalPercent }">
                <div class="flex justify-content-between mt-3 mb-2">
                    <span>Account </span>
                    <span :style="{ width: totalPercent + '%' }" class="absolute text-right">{{ totalPercent }}%</span>
                    <span>Savings: 1000$ </span>
                </div>
            </template>
            <template #meter="slotProps">
                <span :class="slotProps.class" :style="{ backgroundColor: slotProps.value.color, width: slotProps.size }" />
            </template>
        </MeterGroup>
    </div>
    <DocSectionCode :code="code" />
</template>

<script>
export default {
    data() {
        return {
            value: [
                { color: '#239EF0', label: 'Mortgage', value: 25, icon: 'pi pi-home' },
                { color: '#FAA419', label: 'Loan', value: 15, icon: 'pi pi-money-bill' },
                { color: '#EE5879', label: 'Credit Card', value: 20, icon: 'pi pi-credit-card' }
            ],
            code: {
                basic: `
<MeterGroup :value="value" labelPosition="start">
    <template #label="{ value }">
        <div class="flex flex-column text-sm gap-2">
            <template v-for="(val, i) of value" :key="i">
                <span :style="{ color: val.color }" class="flex gap-2">
                    <i :class="val.icon" />
                    {{ val.label }} ({{ val.value }}%)</span
                >
            </template>
        </div>
    </template>
    <template #start="{ totalPercent }">
        <div class="flex justify-content-between mt-3 mb-2">
            <span>Account </span>
            <span :style="{ width: totalPercent + '%' }" class="absolute text-right">{{ totalPercent }}%</span>
            <span>Savings: 1000$ </span>
        </div>
    </template>
    <template #meter="slotProps">
        <span :class="slotProps.class" :style="{ backgroundColor: slotProps.value.color, width: slotProps.size }" />
    </template>
</MeterGroup>
`,
                options: `
<template>
    <div class="card">
        <MeterGroup :value="value" labelPosition="start">
            <template #label="{ value }">
                <div class="flex flex-column text-sm gap-2">
                    <template v-for="(val, i) of value" :key="i">
                        <span :style="{ color: val.color }" class="flex gap-2">
                            <i :class="val.icon" />
                            {{ val.label }} ({{ val.value }}%)</span
                        >
                    </template>
                </div>
            </template>
            <template #start="{ totalPercent }">
                <div class="flex justify-content-between mt-3 mb-2">
                    <span>Account </span>
                    <span :style="{ width: totalPercent + '%' }" class="absolute text-right">{{ totalPercent }}%</span>
                    <span>Savings: 1000$ </span>
                </div>
            </template>
            <template #meter="slotProps">
                <span :class="slotProps.class" :style="{ backgroundColor: slotProps.value.color, width: slotProps.size }" />
            </template>
        </MeterGroup>
    </div>
</template>

<script>
export default {
    data() {
        return {
            value: [
                { color: '#239EF0', label: 'Mortgage', value: 25 },
                { color: '#FAA419', label: 'Loan', value: 15 },
                { color: '#EE5879', label: 'Credit Card', value: 20 }
            ]
        };
    }
};
<\/script>
`,
                composition: `
<template>
    <div class="card">
        <MeterGroup :value="value" labelPosition="start">
            <template #label="{ value }">
                <div class="flex flex-column text-sm gap-2">
                    <template v-for="(val, i) of value" :key="i">
                        <span :style="{ color: val.color }" class="flex gap-2">
                            <i :class="val.icon" />
                            {{ val.label }} ({{ val.value }}%)</span
                        >
                    </template>
                </div>
            </template>
            <template #start="{ totalPercent }">
                <div class="flex justify-content-between mt-3 mb-2">
                    <span>Account </span>
                    <span :style="{ width: totalPercent + '%' }" class="absolute text-right">{{ totalPercent }}%</span>
                    <span>Savings: 1000$ </span>
                </div>
            </template>
            <template #meter="slotProps">
                <span :class="slotProps.class" :style="{ backgroundColor: slotProps.value.color, width: slotProps.size }" />
            </template>
        </MeterGroup>
    </div>
</template>

<script setup>
import { ref } from "vue";

const value = ref([
    { color: '#239EF0', label: 'Mortgage', value: 25 },
    { color: '#FAA419', label: 'Loan', value: 15 },
    { color: '#EE5879', label: 'Credit Card', value: 20 }
]);
<\/script>
`
            }
        };
    }
};
</script>
