MeterGroup

MeterGroup displays scalar measurements within a known range.


import MeterGroup from 'primevue/metergroup';

MeterGroup requires a value as the data to display where each item in the collection should be a type of MeterItem.

  1. Space used (15%)

<MeterGroup :value="value" />

Adding more items to the array displays the meters in a group.

  1. Apps (16%)
  2. Messages (8%)
  3. Media (24%)
  4. System (10%)

<MeterGroup :value="value" />

Icons can be displayed next to the labels instead of the default marker.

  1. Apps (16%)
  2. Messages (8%)
  3. Media (24%)
  4. System (10%)

<MeterGroup :value="value" />

The position of the labels relative to the meters is defined using the labelPosition property. The default orientation of the labels is horizontal, and the vertical alternative is available through the labelOrientation option.

  1. Apps (16%)
  2. Messages (8%)
  3. Media (24%)
  4. System (10%)

<MeterGroup :value="value" labelPosition="start" labelOrientation="vertical" />

Layout of the MeterGroup is configured with the orientation property that accepts either horizontal or vertical as available options.

  1. Apps (24%)
  2. Messages (16%)
  3. Media (24%)
  4. System (12%)

<MeterGroup :value="value" orientation="vertical" labelOrientation="vertical" />

Boundaries are configured with the min and max values whose defaults are 0 and 100 respectively.

  1. Apps (8%)
  2. Messages (4%)
  3. Media (12%)
  4. System (5%)

<MeterGroup :value="value" :max="200"  />

MeterGroup provides templating support for labels, meter items, and content around the meters.

Apps25%
Messages15%
Media20%
System10%
Storage70%1TB

<MeterGroup :value="value" labelPosition="start">
    <template #label="{ value }">
        <div class="flex flex-wrap gap-3">
            <template v-for="val of value" :key="val.label">
                <Card class="flex-1">
                    <template #content>
                        <div class="flex justify-content-between gap-5">
                            <div class="flex flex-column gap-1">
                                <span class="text-secondary text-sm">{{ val.label }}</span>
                                <span class="font-bold text-lg">{{ val.value }}%</span>
                            </div>
                            <span class="w-2rem h-2rem border-circle inline-flex justify-content-center align-items-center text-center" :style="{ backgroundColor: `${val.color1}`, color: '#ffffff' }">
                                <i :class="val.icon" />
                            </span>
                        </div>
                    </template>
                </Card>
            </template>
        </div>
    </template>
    <template #meter="slotProps">
        <span :class="slotProps.class" :style="{ background: `linear-gradient(to right, ${slotProps.value.color1}, ${slotProps.value.color2})`, width: slotProps.size }" />
    </template>
    <template #start="{ totalPercent }">
        <div class="flex justify-content-between mt-3 mb-2 relative">
            <span>Storage</span>
            <span :style="{ width: totalPercent + '%' }" class="absolute text-right">{{ totalPercent }}%</span>
            <span class="font-medium">1TB</span>
        </div>
    </template>
    <template #end>
        <div class="flex justify-content-between mt-3">
            <Button label="Manage Storage" outlined size="small" />
            <Button label="Update Plan" size="small" />
        </div>
    </template>
</MeterGroup>

Screen Reader

MeterGroup component uses meter role in addition to the aria-valuemin, aria-valuemax and aria-valuenow attributes. Value to describe the component can be defined using aria-labelledby prop.

Keyboard Support

Component does not include any interactive elements.