All skills
skilld-dev avatar

/primevue-skilld

@b9c39cb

Use when writing, debugging, or updating code that imports primevue (PrimeVue v5, UI component library for Vue 3). Provides setup with the required PrimeUI license key, deprecated API replacements, compound component usage, and design token theming.

Use this Skill: https://skilld.dev/gh/skilld-dev/vue-ecosystem-skills/primevue-skilld

This session only. Nothing lands on disk.

SKILL.md

≈67 tokens always: the name and description. ≈1.8k when used: this file. ≈4.3k more on demand in 3 files.

PrimeVue (primevue@5.0.1)

Version 5.0.1, prepared source input/source/package.json. UI component library for Vue 3. Docs: https://primevue.dev (component pages live at https://primevue.dev/<name>, e.g. https://primevue.dev/inputtags/).

Critical v5 facts

  1. License key required. v5 ships under the PrimeUI dual license (free Community or paid Commercial). Pass the key as a license string option when installing the plugin. Verification is offline; a missing, invalid, or expired key may display a license notice (input/source/LICENSE.md).
  2. No breaking public API changes from v4, per the official migration guide (https://primevue.dev/migration/v5/). Deprecated v4 APIs still work in v5 and are removed in v6. Write new code against the replacements in v5 changes.
  3. 16px root font base. v5 assumes a 16px document root; v4 assumed 14px. Every preset ships a -compat variant for 14px layouts, maintained until June 2027 (https://primevue.dev/theming/styled/).
  4. Config plugin. Install once with app.use. The default export of primevue/config is also re-exported as Config from the package root (input/source/index.mjs:139).

Setup

// main.js
import { createApp } from 'vue';
import PrimeVue from 'primevue/config'; // or: import { Config } from 'primevue'
import Aura from '@primeuix/themes/aura';
import App from './App.vue';

const app = createApp(App);
app.use(PrimeVue, {
    license: '<your PrimeUI license key>',
    ripple: true, // optional, disabled by default
    theme: {
        preset: Aura,
        options: {
            darkModeSelector: '.app-dark' // default is 'system'
        }
    }
});

Details: theme options, locale, unstyled mode, Nuxt module, auto import in setup.

Import patterns

<script setup>
// Tree-shakeable subpath imports (package.json exports map "./*")
import Button from 'primevue/button';
import Select from 'primevue/select';
// Style classes for a component (design token CSS)
import SelectStyle from 'primevue/select/style';
</script>
  • Root import from 'primevue' also works and exports every component, style, service, and composable (input/source/index.mjs).
  • Icons: SVG icon components come from @primeicons/vue (dependency ^8.0.0 in input/source/package.json). The @primevue/icons package is deprecated in v5.

Golden rules

  • Never use a deprecated component in new code. Deprecated in v5 (removal in v6): MultiSelect, Galleria, Image, ColorPicker, ImageCompare, ScrollPanel, Password, InputMask (component), PanelMenu, Chart, Editor, AutoComplete with multiple, Carousel driven by value, Tabs scrollable. Use the replacement table in v5 changes.
  • Buttons compose content in the default slot. label, icon, iconPos, iconClass, badge, badgeClass, badgeSeverity, loading, loadingIcon props are all deprecated since v5.0.0 (input/source/button/index.d.ts).
  • Compound components over prop-driven templates: Tabs/TabList/Tab/TabPanels/TabPanel, Accordion/AccordionPanel/AccordionHeader/AccordionContent, Stepper family, Sidebar family, Gallery family, Carousel family. Active state binds with v-model:value (Accordion's activeIndex prop and events were removed in v5).
  • Overlays are Teleport-based: set appendTo="body" (default) or "self"; most overlay components accept overlayStyle/overlayClass (panel* props were removed in v5).
  • Prefer design tokens over CSS overrides: use dt prop for scoped tokens and preset customization via definePreset instead of :deep() or style classes (https://primevue.dev/theming/styled/).

Common tasks

Button (slot composition)

<Button severity="contrast" size="small">
    <i class="pi pi-check" />
    <span>Confirm</span>
    <Badge value="2" />
</Button>

Icon order in the slot replaces iconPos; use disabled plus your own spinner instead of loading.

Multiple selection (replaces MultiSelect)

<Select v-model="selectedCities" multiple :options="cities" optionLabel="name" fluid />

multiple on Select ("When specified, allows selecting multiple values", input/source/select/index.d.ts).

Tags input (replaces AutoComplete multiple)

<InputTags v-model="tags" typeahead :suggestions="suggestions" @complete="search" delimiter="," />

Key props: max, allowDuplicate, addOnBlur, addOnPaste, addOnTab, delimiter (string or RegExp). Emits add, remove, option-select, complete (input/source/inputtags/index.d.ts).

Toast service

// main.js: app.use(ToastService)
import { useToast } from 'primevue/usetoast';
const toast = useToast();
toast.add({ severity: 'info', summary: 'Saved', life: 3000 });

Service methods: add, remove, removeGroup, removeAllGroups (input/source/toastservice/index.d.ts). Same pattern for ConfirmationService + useConfirm and DialogService + useDialog (dynamic dialogs).

Mask directive (replaces InputMask component)

<InputText v-mask="{ mask: '99-9999', unmask: true }" v-model="value" />

Options: mask, slotChar (default _), autoClear (default true), unmask, onChange receiving { value, rawValue } (input/source/mask/index.d.ts).

App sidebar (compound)

<SidebarLayout>
    <SidebarAside>
        <SidebarHeader>…</SidebarHeader>
        <SidebarContent>
            <SidebarGroup>
                <SidebarGroupLabel>Admin</SidebarGroupLabel>
                <SidebarGroupContent>
                    <SidebarMenu>
                        <SidebarMenuItem><SidebarMenuButton>Users</SidebarMenuButton></SidebarMenuItem>
                    </SidebarMenu>
                </SidebarGroupContent>
            </SidebarGroup>
        </SidebarContent>
        <SidebarFooter>…</SidebarFooter>
    </SidebarAside>
    <SidebarMain><RouterView /></SidebarMain>
</SidebarLayout>

Sidebar inside a SidebarLayout requires a unique id; supports side, variant (sidebar|floating|inset), collapsible (offcanvas|icon|none), v-model:open, openOnHover, overlay, width (input/source/sidebar/index.d.ts). Full part list in components.

Form fields

  • FloatLabel, IftaLabel (in-field label), or plain Label.
  • Wrap a region in <Fluid> for full-width inputs instead of fluid on each field.
  • invalid prop on any input drives the error style; validation state via @primevue/forms (separate package, https://primevue.dev/forms/).

DataTable performance

With dataKey set, bind expandedRows to an object ({ '1004': true }) rather than an array of row objects for O(1) lookup on large data (official DataTable docs). Persist user preferences with stateStorage + stateKey.

References

Source: SKILL.md on GitHub

No alerts8d3 checks · Risk SAFE
  • Gen Agent Trust Hub8d

    The skill is a comprehensive documentation and reference resource for the PrimeVue UI library. It contains component guides, API change logs, and historical GitHub issues without any executable scripts or malicious patterns.

  • Socket8d

    No alerts

  • Snyk8d

    Risk: LOW · No issues

Signed by skilld at b9c39cb. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub last week.

Activeupdated last week

README badge

README badge for skilld-dev/vue-ecosystem-skills/primevue-skilld