Composables

Formatting

useNumberFormat, useCurrency, useCounterAnimation e useTrend per formattazione e animazioni.

Panoramica

Quattro composables per formattazione numeri/valute, animazioni di conteggio e gestione visiva dei trend.

useNumberFormat

Formattazione numeri, valute, percentuali e notazione compatta con default italiano.

import { useNumberFormat } from '@pzeta/vue-widget'

const { formatNumber, formatCurrency, formatCompact, formatPercent, formatAuto } = useNumberFormat()

formatNumber(1234.56)                          // '1.235'
formatNumber(1234.56, { decimals: 2 })         // '1.234,56'
formatNumber(1234, { prefix: '$' })            // '$1.234'
formatCurrency(1234.56)                        // '1.234,56 EUR'
formatCurrency(1234.56, { currency: 'USD' })   // '$ 1.234,56' (con locale it-IT)
formatCompact(1500000)                         // '1,5M'
formatCompact(1500, { prefix: '$' })           // '$1,5k'
formatPercent(0.1234)                          // '12,34%'
formatPercent(0.1234, { decimals: 0 })         // '12%'
formatAuto(1234)                               // '1.234'
formatAuto(1234.5, ' kg')                      // '1.234,50 kg'

Opzioni — NumberFormatOptions

OpzioneTipoDefaultDescrizione
decimalsnumber0Cifre decimali
prefixstring''Prefisso (es. '$', '+')
suffixstring''Suffisso (es. '%', ' utenti')
separatorbooleantrueSeparatore migliaia
localestring'it-IT'Locale Intl

Soglie formatCompact

ValoreNotazione
>= 1.000.000.000B (miliardi)
>= 1.000.000M (milioni)
>= 1.000k (migliaia)
< 1.000numero localizzato

formatPercent aspetta input 0-1 e moltiplica per 100 (es. 0.15 → '15%').

useCurrency

Wrapper specializzato che integra il simbolo valuta dal locale corrente con override per widget.

import { useCurrency } from '@pzeta/vue-widget'

const { symbol, formatAmount, formatAmountWithSeparator } = useCurrency()
symbol.value                              // '€' (per locale 'it')
formatAmount(1234)                        // '€1234'
formatAmountWithSeparator(1234.5, 2)      // '€1.234,50'

// Con override prop
const { symbol } = useCurrency({ override: props.currency })
OpzioneTipoDescrizione
overridestringSimbolo valuta che sovrascrive quello del locale

Il simbolo viene letto dalla chiave i18n common.currencySymbol. Se l'app non usa @pzeta/vue-i18n, configurare customTranslations nel plugin.

useCounterAnimation

Anima contatori numerici con incremento progressivo, ideale per metriche dashboard.

import { useCounterAnimation } from '@pzeta/vue-widget'

const { animatedValues, restart } = useCounterAnimation(
  () => props.metrics.map(m => m.value),
  { duration: 2000 }
)

// In template:
// <span v-for="(val, i) in animatedValues" :key="i">{{ val }}</span>

// Riavvio manuale dopo aggiornamento dati
watch(() => props.metrics, () => restart())

Opzioni — CounterAnimationOptions

OpzioneTipoDefaultDescrizione
durationnumber1500Durata totale (ms)
stepsnumber50Numero di step/frame
roundbooleantrueArrotonda a interi durante animazione
animatebooleantrueDisabilita per accessibilita / mostra valore finale

L'animazione parte automaticamente al mount e i timer vengono puliti al unmount.

useTrend

Gestione visiva di trend (up/down/neutral) con icone, colori, severity PrimeVue e simboli Unicode.

import { useTrend } from '@pzeta/vue-widget'

const {
  getTrendInfo,
  getTrendFromChange,
  getTrendColorClass,
  getTrendSeverity,
  getTrendIcon,
  getTrendSymbol,
} = useTrend()

const info = getTrendInfo('up')
// { direction: 'up', colorClass: 'text-success-500', severity: 'success',
//   icon: 'pi pi-arrow-up', symbol: '↑' }

getTrendFromChange(5.2)    // 'up'
getTrendFromChange(-3.1)   // 'down'
getTrendFromChange(0)      // 'neutral'

Mapping direzioni

DirezionecolorClassseveritysymbol
'up'text-success-500'success'
'down'text-danger-500'danger'
'neutral'text-secondary-500'secondary'

getTrendIcon legge dal registry icone configurato (categoria trend), quindi cambia automaticamente con il preset attivo.