Skip to content

Nuxt 3 Installation

Install the Nuxt module — it pulls in @grundtone/vue, @grundtone/design-system, and all dependencies automatically:

bash
npm install -D @grundtone/nuxt

Module configuration

ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@grundtone/nuxt'],
  grundtone: {
    prefix: 'GT',        // Component name prefix (default)
    components: true,     // Auto-import components (default)
    composables: true,    // Auto-import composables (default)
  },
});

The module automatically:

  • Auto-imports all components with the configured prefix
  • Injects the design-system CSS (custom properties and component styles)

No manual CSS imports needed.

Use components

Components are auto-imported with the configured prefix — no import statements needed:

vue
<template>
  <GTButton variant="primary">Submit</GTButton>
  <GTButton variant="outlined" rounded="full">Cancel</GTButton>
</template>

Options

OptionTypeDefaultDescription
prefixstring'GT'Component name prefix
componentsbooleantrueAuto-import components
composablesbooleantrueAuto-import composables
themeobjectundefinedTheme configuration

Remove prefix

Set prefix: '' to use component names directly:

ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@grundtone/nuxt'],
  grundtone: {
    prefix: '',
  },
});
vue
<template>
  <Button variant="primary">Submit</Button>
</template>

SCSS tokens in Nuxt

To use design-system SCSS tokens in your own components, configure Vite in nuxt.config.ts:

ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@grundtone/nuxt'],
  vite: {
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "@grundtone/design-system/scss/lib" as tokens;`,
        },
      },
    },
  },
});

Then use tokens in any component:

vue
<style lang="scss">
.my-card {
  background: tokens.color('surface');
  padding: tokens.space('md');
  border-radius: tokens.radius('lg');
  box-shadow: tokens.shadow('sm');
}
</style>

What gets auto-imported

The Nuxt module scans these directories from @grundtone/vue:

  • atoms/ — Basic components (Button, etc.)
  • molecules/ — Component combinations
  • organisms/ — Complex components

Only components (PascalCase .vue files) are imported. Demo files and utilities are excluded.

Composables from @grundtone/vue/composables are also auto-imported when composables: true.