diff --git a/assets/global.css b/assets/global.css new file mode 100644 index 0000000..b591653 --- /dev/null +++ b/assets/global.css @@ -0,0 +1,6 @@ +body { + margin: 0; + padding: 0; + font-family: var(--font-family); + background-color: var(--surface-ground); +} diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..3cbe1e0 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,7 @@ +declare module 'nuxt/schema' { + interface PublicRuntimeConfig { + githubRawBaseUrl: string; + } +} +// It is always important to ensure you import/export something when augmenting a type +export {}; diff --git a/nuxt.config.ts b/nuxt.config.ts index 8851e77..a581f92 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,4 +1,56 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - devtools: { enabled: true } -}) + devtools: { enabled: process.env.NODE_ENV === 'development' }, + css: [ + 'primevue/resources/themes/lara-dark-teal/theme.css', + 'primeflex/primeflex.min.css', + 'primeicons/primeicons.css', + '@/assets/global.css' + ], + build: { + transpile: ['primevue'] + }, + app: { + head: { + title: 'Spotify Playlist Archive', + htmlAttrs: { + lang: 'en' + }, + meta: [ + { + name: 'description', + content: + 'Browse past versions of thousands of playlists saved over time' + }, + { + name: 'og:title', + content: 'Spotify Playlist Archive' + }, + { + name: 'og:description', + content: + 'Browse past versions of thousands of playlists saved over time' + }, + { + name: 'twitter:card', + content: 'summary' + }, + { + name: 'twitter:title', + content: 'Spotify Playlist Archive' + }, + { + name: 'twitter:description', + content: + 'Browse past versions of thousands of playlists saved over time' + } + ] + } + }, + runtimeConfig: { + public: { + githubRawBaseUrl: + 'https://raw.githubusercontent.com/mackorone/spotify-playlist-archive' + } + } +}); diff --git a/package-lock.json b/package-lock.json index 7d5779e..87cae73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,12 @@ "": { "name": "nuxt-app", "hasInstallScript": true, + "dependencies": { + "fast-fuzzy": "^1.12.0", + "primeflex": "^3.3.1", + "primeicons": "^6.0.1", + "primevue": "^3.34.1" + }, "devDependencies": { "@nuxt/devtools": "latest", "nuxt": "^3.7.3" @@ -5141,6 +5147,14 @@ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true }, + "node_modules/fast-fuzzy": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fast-fuzzy/-/fast-fuzzy-1.12.0.tgz", + "integrity": "sha512-sXxGgHS+ubYpsdLnvOvJ9w5GYYZrtL9mkosG3nfuD446ahvoWEsSKBP7ieGmWIKVLnaxRDgUJkZMdxRgA2Ni+Q==", + "dependencies": { + "graphemesplit": "^2.4.1" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -5584,6 +5598,15 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemesplit": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/graphemesplit/-/graphemesplit-2.4.4.tgz", + "integrity": "sha512-lKrpp1mk1NH26USxC/Asw4OHbhSQf5XfrWZ+CDv/dFVvd1j17kFgMotdJvOesmHkbFX9P9sBfpH8VogxOWLg8w==", + "dependencies": { + "js-base64": "^3.6.0", + "unicode-trie": "^2.0.0" + } + }, "node_modules/gzip-size": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", @@ -6182,6 +6205,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-base64": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7908,6 +7936,11 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, "node_modules/parse-git-config": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz", @@ -8647,6 +8680,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/primeflex": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.3.1.tgz", + "integrity": "sha512-zaOq3YvcOYytbAmKv3zYc+0VNS9Wg5d37dfxZnveKBFPr7vEIwfV5ydrpiouTft8MVW6qNjfkaQphHSnvgQbpQ==" + }, + "node_modules/primeicons": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==" + }, + "node_modules/primevue": { + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/primevue/-/primevue-3.34.1.tgz", + "integrity": "sha512-5QPy8I+TMYSQgC0Bs/9vINsOVjgCOQFAr6uz49Wzcj8u04qJ2mG/z6OhAana+f4yKTTHVwHLVnuGkrIp/nI9DA==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -9919,6 +9970,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -10123,6 +10179,15 @@ "url": "https://github.com/sponsors/harlan-zw" } }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, "node_modules/unimport": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.3.0.tgz", diff --git a/package.json b/package.json index f22b86c..74fe0ba 100644 --- a/package.json +++ b/package.json @@ -12,5 +12,11 @@ "devDependencies": { "@nuxt/devtools": "latest", "nuxt": "^3.7.3" + }, + "dependencies": { + "fast-fuzzy": "^1.12.0", + "primeflex": "^3.3.1", + "primeicons": "^6.0.1", + "primevue": "^3.34.1" } } diff --git a/plugins/primevue.ts b/plugins/primevue.ts new file mode 100644 index 0000000..bf7eda6 --- /dev/null +++ b/plugins/primevue.ts @@ -0,0 +1,7 @@ +import { defineNuxtPlugin } from '#app'; + +import PrimeVue from 'primevue/config'; + +export default defineNuxtPlugin((nuxtApp) => { + nuxtApp.vueApp.use(PrimeVue, { ripple: true }); +});