Composables

Chart, Icon e i18n

useChartDefaults per Chart.js, useIcon per il registry icone e useI18n per localizzazione.

useChartDefaults

Configurazioni standardizzate per Chart.js: tooltip, griglie, legende, palette colori. Mantiene stili coerenti tra tutti i widget grafici.

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

const {
  getChartOptions,
  getMinimalScales,
  tooltipStyle,
  gridStyle,
  fontStyle,
  legendStyle,
  colorPalette,
  getColor,
} = useChartDefaults()

// Opzioni per tipo
const lineOptions = getChartOptions('line')
const barOptions = getChartOptions('bar', {
  showLegend: true,
  legendPosition: 'top',
  showGridX: false,
})

// Palette colori per dataset multipli
const datasets = data.map((item, i) => ({
  ...item,
  backgroundColor: getColor(i).bg,
  borderColor: getColor(i).border,
}))

Opzioni — ChartDefaultsOptions

OpzioneTipoDefaultDescrizione
showLegendbooleanfalseMostra legenda
legendPosition'top' | 'bottom' | 'left' | 'right''bottom'Posizione legenda
maintainAspectRatiobooleanfalseMantiene rapporto d'aspetto
showGridYbooleantrueLinee griglia asse Y
showGridXbooleantrueLinee griglia asse X
beginAtZerobooleantrueAsse Y parte da zero
cutoutstring'60%'Ritaglio centrale per doughnut

Tipi grafico — ChartType

'line' | 'bar' | 'doughnut' | 'pie' | 'radar' | 'polarArea'

Palette colori

Sette colori bilanciati (blue, emerald, amber, red, violet, pink, cyan), accessibili tramite getColor(index) con cycle modulo. Ogni colore ha bg (con trasparenza 0.3) e border (pieno).

getMinimalScales() ritorna config scale con display: false ovunque — utile per sparkline.

useIcon

Composable per accedere e modificare il registry icone configurato dal plugin (con fallback su stato globale se il plugin non e installato).

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

const { icons, getIcon, setIcons, switchIconSet, resolveIconClass, getCurrentPreset } = useIcon()

// Accesso reattivo alla configurazione completa
const editIcon = icons.value.actions.edit

// Helper tipizzato per singola icona
const editClass = getIcon('actions', 'edit')      // 'pi pi-pencil'

// Cambia preset a runtime
switchIconSet('lucide')

// Override parziale
setIcons({ actions: { edit: 'fa-solid fa-pen' } })

// Risoluzione dinamica nome -> classe
resolveIconClass('users')        // 'pi pi-users' (con preset primeicons)
resolveIconClass('icon-users')   // 'icon-users' (gia completa)

// Preset attivo
getCurrentPreset()                // 'primeicons' | 'lucide' | 'fontawesome'

API — UseIconReturn

FunzioneFirmaDescrizione
iconsComputedRef<WidgetIcons>Configurazione reattiva
getIcon<K>(category, name) => stringIcona singola tipizzata
setIcons(newIcons: DeepPartial<WidgetIcons>) => voidOverride parziale (deep merge)
switchIconSet(preset: IconPreset) => voidSwitch preset completo
resolveIconClass(iconName: string) => stringAggiunge prefisso preset se manca
getCurrentPreset() => IconPresetPreset corrente

resolveIconClass riconosce i prefissi noti (pi , icon-, fa-, fa ) e li passa attraverso senza modifiche; altrimenti applica il prefisso del preset attivo.

useI18n

Wrapper tipizzato di @pzeta/vue-i18n con tipi specifici per i widget.

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

const { t, locale, setLocale } = useI18n()

t('widgets.myTasks.title')                          // 'Le Mie Attivita'
t('widgets.myTasks.remaining', { count: 3, total: 10 })
// '3 di 10 rimanenti'

await setLocale('en')
console.log(locale.value)                            // 'en'

API — UseI18nReturn

ProprietaTipoDescrizione
t(key: string, params?: InterpolationParams) => stringTraduce chiave con interpolazione
localeRef<SupportedLocale>Locale corrente reattivo
setLocale(locale: SupportedLocale) => Promise<void>Cambia locale (carica traduzioni lazy)

Locale supportati

'it' (precaricato) | 'en' | 'de' | 'fr' | 'es'.

Struttura TranslationDictionary

Le chiavi sono organizzate in sette sezioni:

SezioneEsempio chiave
widgetswidgets.dashboard.title
tablestables.empty
buttonsbuttons.save
statusstatus.active
commoncommon.loading, common.currencySymbol
chartscharts.noData
countriescountries.IT, countries.DE

L'app consumer deve aver configurato @pzeta/vue-i18n prima di usare il composable. Vedi Installazione per il setup completo.