From 17ea7efd3b406c052453df6c1b756c406f5c5d69 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Wed, 6 Mar 2024 12:26:52 +0100 Subject: [PATCH] chore: externalize theme to type app config --- package.json | 2 + playground/app.vue | 7 +- playground/pages/[...slug].vue | 6 ++ pnpm-lock.yaml | 6 ++ src/module.ts | 23 ++++++- src/runtime/components/Button.vue | 88 ++++++++----------------- src/runtime/components/Link.vue | 12 ++++ src/runtime/theme/button.ts | 106 ++++++++++++++++++++++++++++++ src/runtime/theme/index.ts | 1 + src/runtime/types/index.d.ts | 3 + tailwind.config.ts | 18 ----- 11 files changed, 188 insertions(+), 84 deletions(-) create mode 100644 playground/pages/[...slug].vue create mode 100644 src/runtime/theme/button.ts create mode 100644 src/runtime/theme/index.ts create mode 100644 src/runtime/types/index.d.ts delete mode 100644 tailwind.config.ts diff --git a/package.json b/package.json index deb58116..92c8257f 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,8 @@ "eslint": "^8.57.0", "nuxt": "npm:nuxt-nightly@pr-26085", "ohash": "^1.1.3", + "vue": "^3.4.21", + "vue-router": "^4.3.0", "vue-tsc": "^2.0.5" } } diff --git a/playground/app.vue b/playground/app.vue index eac2467e..ae6d0b65 100644 --- a/playground/app.vue +++ b/playground/app.vue @@ -1,7 +1,8 @@ \ No newline at end of file diff --git a/playground/pages/[...slug].vue b/playground/pages/[...slug].vue new file mode 100644 index 00000000..9382da64 --- /dev/null +++ b/playground/pages/[...slug].vue @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77ed3276..0e5a1c8b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,6 +52,12 @@ devDependencies: ohash: specifier: ^1.1.3 version: 1.1.3 + vue: + specifier: ^3.4.21 + version: 3.4.21(typescript@5.3.3) + vue-router: + specifier: ^4.3.0 + version: 4.3.0(vue@3.4.21) vue-tsc: specifier: ^2.0.5 version: 2.0.5(typescript@5.3.3) diff --git a/src/module.ts b/src/module.ts index 79872daa..3d798f9a 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,5 +1,24 @@ import { defu } from 'defu' import { createResolver, defineNuxtModule, addComponentsDir, addImportsDir, installModule } from '@nuxt/kit' +import type { DeepPartial } from './runtime/types' +import * as theme from './runtime/theme' + +type UI = { + primary?: string + gray?: string + [key: string]: any +} & DeepPartial + +declare module 'nuxt/schema' { + interface AppConfigInput { + ui?: UI + } +} +declare module '@nuxt/schema' { + interface AppConfigInput { + ui?: UI + } +} export default defineNuxtModule({ meta: { @@ -12,6 +31,7 @@ export default defineNuxtModule({ async setup (_, nuxt) { const resolver = createResolver(import.meta.url) + nuxt.options.alias['#ui'] = resolver.resolve('./runtime') nuxt.options.appConfig.ui = defu(nuxt.options.appConfig.ui || {}, { primary: 'green', gray: 'cool', @@ -27,7 +47,8 @@ export default defineNuxtModule({ darkMode: 'class', content: { files: [ - resolver.resolve('./runtime/components/**/*.{vue,mjs,ts}') + resolver.resolve('./runtime/components/**/*.{vue,ts}'), + resolver.resolve('./runtime/theme/**/*.ts') ] } } diff --git a/src/runtime/components/Button.vue b/src/runtime/components/Button.vue index c5ff8497..fbc51f39 100644 --- a/src/runtime/components/Button.vue +++ b/src/runtime/components/Button.vue @@ -1,52 +1,13 @@ \ No newline at end of file diff --git a/src/runtime/components/Link.vue b/src/runtime/components/Link.vue index cf2ec221..5da0a337 100644 --- a/src/runtime/components/Link.vue +++ b/src/runtime/components/Link.vue @@ -126,6 +126,17 @@ export const linkProps = { default: undefined } } + +export const getLinkProps = (props: any) => { + const keys = Object.keys(linkProps) + + return keys.reduce((acc, key) => { + if (props[key] !== undefined) { + acc[key] = props[key] + } + return acc + }, {} as Record) +} +