├── pnpm-workspace.yaml ├── .stackblitzrc ├── public ├── nuxt.png ├── vite.png ├── favicon.ico ├── starter_4.png ├── primevue-logo.webp ├── nuxt-logo.svg └── icon-green.svg ├── app ├── App.scss ├── app.vue ├── components │ ├── app │ │ ├── AppFooter.vue │ │ ├── AppTopbar.vue │ │ ├── AppColorMode.vue │ │ └── AppSidebar.vue │ ├── content │ │ └── HeroCard.vue │ ├── ExternalLink.vue │ ├── PageView.vue │ ├── AdvertiseBox.vue │ ├── ToDo.vue │ └── TipTap.vue ├── assets │ └── sass │ │ ├── form.scss │ │ ├── sidebar.scss │ │ └── main.scss ├── stores │ ├── cats.ts │ ├── counter.ts │ ├── data.ts │ └── theme.ts ├── composables │ ├── primeDataTable.ts │ ├── messages.ts │ ├── navigation.ts │ └── confirmation.ts ├── pages │ ├── templates │ │ └── blueprint.vue │ ├── data │ │ ├── colada.vue │ │ ├── server.vue │ │ ├── i18n.vue │ │ └── stores.vue │ ├── cms │ │ └── [...slug].vue │ ├── ui │ │ ├── tiptap.vue │ │ ├── icons.vue │ │ └── uno.vue │ ├── 404.vue │ ├── prime │ │ ├── messages.vue │ │ └── datatable.vue │ ├── index.vue │ └── form │ │ ├── toggle.vue │ │ └── index.vue ├── layouts │ └── default.vue └── plugins │ └── sidebar.ts ├── i18n ├── locales │ ├── en.json │ └── de.json └── i18n.config.ts ├── server ├── api │ ├── pageview.ts │ └── products.ts └── middleware │ └── log.ts ├── netlify.toml ├── vitest.config.ts ├── eslint.config.js ├── content.config.ts ├── content ├── component.md └── markdown.md ├── compodium ├── examples │ └── ToDoExampleHelp.vue └── preview.vue ├── nuxt3-primevue-starter.iml ├── tsconfig.json ├── test ├── nuxt │ ├── ToDo.test.ts │ └── ExternalLink.test.ts └── basic │ └── vitest_base.test.ts ├── .github ├── dependabot.yml └── workflows │ └── main.yml ├── .gitignore ├── nuxt.run.xml ├── formkit.config.ts ├── LICENSE ├── nuxt.config.ts ├── package.json ├── uno.config.ts ├── README.md └── CHANGELOG.md /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | shamefullyHoist: true 2 | strictPeerDependencies: false -------------------------------------------------------------------------------- /.stackblitzrc: -------------------------------------------------------------------------------- 1 | { 2 | "installDependencies": true, 3 | "startCommand": "npm run dev" 4 | } 5 | -------------------------------------------------------------------------------- /public/nuxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sfxcode/nuxt-primevue-starter/HEAD/public/nuxt.png -------------------------------------------------------------------------------- /public/vite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sfxcode/nuxt-primevue-starter/HEAD/public/vite.png -------------------------------------------------------------------------------- /app/App.scss: -------------------------------------------------------------------------------- 1 | @use 'assets/sass/sidebar'; 2 | @use 'assets/sass/form'; 3 | @use 'assets/sass/main'; 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sfxcode/nuxt-primevue-starter/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /i18n/locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "welcome": "Welcome", 3 | "save": "Save", 4 | "search": "Search" 5 | } 6 | -------------------------------------------------------------------------------- /public/starter_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sfxcode/nuxt-primevue-starter/HEAD/public/starter_4.png -------------------------------------------------------------------------------- /i18n/locales/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "welcome": "Willkommen", 3 | "save": "Speichern", 4 | "search": "Suchen" 5 | } 6 | -------------------------------------------------------------------------------- /public/primevue-logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sfxcode/nuxt-primevue-starter/HEAD/public/primevue-logo.webp -------------------------------------------------------------------------------- /server/api/pageview.ts: -------------------------------------------------------------------------------- 1 | const startAt = Date.now() 2 | let count = 0 3 | 4 | export default defineEventHandler(() => ({ 5 | pageview: count++, 6 | startAt, 7 | })) 8 | -------------------------------------------------------------------------------- /server/middleware/log.ts: -------------------------------------------------------------------------------- 1 | import { consola } from 'consola' 2 | 3 | export default defineEventHandler((event) => { 4 | consola.debug(`New request: ${event.node.req.url}`) 5 | }) 6 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "pnpm run build" 3 | 4 | [build.environment] 5 | NPM_FLAGS = "--version" 6 | NODE_VERSION = "20" 7 | 8 | [[redirects]] 9 | from = "/*" 10 | to = "/index.html" 11 | status = 200 12 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineVitestConfig } from '@nuxt/test-utils/config' 2 | 3 | export default defineVitestConfig({ 4 | test: { 5 | environment: 'nuxt', 6 | }, 7 | // any custom Vitest config you require 8 | }) 9 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import antfu from '@antfu/eslint-config' 3 | import nuxt from './.nuxt/eslint.config.mjs' 4 | 5 | export default antfu( 6 | { 7 | unocss: true, 8 | formatters: true, 9 | pnpm: true, 10 | }, 11 | ).append(nuxt()) 12 | -------------------------------------------------------------------------------- /app/app.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /content.config.ts: -------------------------------------------------------------------------------- 1 | import { defineContentConfig, defineCollection } from '@nuxt/content' 2 | 3 | export default defineContentConfig({ 4 | collections: { 5 | content: defineCollection({ 6 | type: 'page', 7 | source: '**/*.md' 8 | }) 9 | } 10 | }) -------------------------------------------------------------------------------- /content/component.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Nuxt Content' 3 | description: 'Component Sample' 4 | author: 'Tom' 5 | --- 6 | 7 | ### Navigation 8 | 9 | [Markdown Sample](/cms/markdown) 10 | 11 | ::heroCard 12 | Hero Component Sample 13 | #description 14 | This will be rendered inside the `description` slot. 15 | :: 16 | -------------------------------------------------------------------------------- /compodium/examples/ToDoExampleHelp.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /app/components/app/AppFooter.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/components/content/HeroCard.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /app/assets/sass/form.scss: -------------------------------------------------------------------------------- 1 | .p-formkit-data-view { 2 | .formkit-form { 3 | .formkit-outer { 4 | padding-bottom: 0.8rem; 5 | } 6 | 7 | &.form-horizontal { 8 | padding-bottom: 1.2rem; 9 | } 10 | 11 | .formkit-help { 12 | margin: 0; 13 | } 14 | } 15 | } 16 | 17 | .p-formkit-data-debug { 18 | padding-top: 1rem; 19 | } 20 | -------------------------------------------------------------------------------- /app/components/ExternalLink.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /nuxt3-primevue-starter.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/stores/cats.ts: -------------------------------------------------------------------------------- 1 | export function useCatsStore() { 2 | const staleTime: number = 60 * 1000 3 | 4 | const { data: catsFacts } = useQuery({ 5 | key: () => ['cats-facts'], 6 | query: () => fetch('https://catfact.ninja/facts').then(res => res.json()).then((res: any) => { 7 | return res.data 8 | }), 9 | staleTime, 10 | }) 11 | 12 | return { catsFacts } 13 | } 14 | -------------------------------------------------------------------------------- /app/stores/counter.ts: -------------------------------------------------------------------------------- 1 | export const useCounterStore = defineStore('counter', () => { 2 | const count = ref(0) 3 | const name = ref('sfxcode') 4 | const doubleCount = computed(() => count.value * 2) 5 | function increment() { 6 | count.value++ 7 | } 8 | 9 | watch(name, () => { 10 | count.value = 0 11 | }) 12 | 13 | return { count, name, doubleCount, increment } 14 | }) 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "files": [], 4 | "references": [ 5 | { 6 | "path": "./.nuxt/tsconfig.app.json" 7 | }, 8 | { 9 | "path": "./.nuxt/tsconfig.server.json" 10 | }, 11 | { 12 | "path": "./.nuxt/tsconfig.shared.json" 13 | }, 14 | { 15 | "path": "./.nuxt/tsconfig.node.json" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /app/composables/primeDataTable.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | export function usePrimeDataTable() { 4 | const tableData = ref([]) 5 | 6 | const filters = ref({}) 7 | const dataTableRef = ref() 8 | 9 | function exportCSV() { 10 | dataTableRef.value?.exportCSV() 11 | } 12 | 13 | return { 14 | tableData, 15 | filters, 16 | dataTableRef, 17 | exportCSV, 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/nuxt/ToDo.test.ts: -------------------------------------------------------------------------------- 1 | // @vitest-environment nuxt 2 | import { mountSuspended } from '@nuxt/test-utils/runtime' 3 | import { describe, expect, it } from 'vitest' 4 | import ToDo from '../../app/components/ToDo.vue' 5 | 6 | describe('todo', () => { 7 | it('component can be mounted', async () => { 8 | const component = await mountSuspended(ToDo) 9 | expect(component.html()).toContain('TODO') 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /app/components/PageView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /app/pages/templates/blueprint.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /compodium/preview.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | 13 | 29 | -------------------------------------------------------------------------------- /app/components/AdvertiseBox.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 24 | 25 | 28 | -------------------------------------------------------------------------------- /app/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: npm # See documentation for possible values 9 | directory: / # Location of package manifests 10 | schedule: 11 | interval: monthly 12 | -------------------------------------------------------------------------------- /app/pages/data/colada.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/assets/sass/sidebar.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:color'; 2 | @use 'vue-sidebar-menu/src/scss/vue-sidebar-menu.scss' with ( 3 | $primary-color: var(--p-primary-color), 4 | $base-bg: #2a2a2e, 5 | $item-color: #fff, 6 | $item-active-color: var(--p-primary-color), 7 | $item-font-size: 14px, 8 | $item-line-height: 18px, 9 | $item-padding: 8px 14px, 10 | $icon-height: 32px, 11 | $icon-width: 32px 12 | ); 13 | 14 | .v-sidebar-menu hr { 15 | margin-bottom: 8px; 16 | background-color: rgba(color.adjust(#2a2a2e, $lightness: -5%), 0.5); 17 | border: 0 none; 18 | height: 0.1rem; 19 | } 20 | -------------------------------------------------------------------------------- /app/components/app/AppTopbar.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 |