chore(templates): handle icons and without function

This commit is contained in:
Benjamin Canac
2024-03-07 17:10:27 +01:00
parent b08d2bd3c6
commit 11dd34c15d
5 changed files with 21 additions and 11 deletions

View File

@@ -34,10 +34,13 @@ export default function createTemplates (options: ModuleOptions, nuxt: Nuxt) {
nuxt.options.css.push(template.dst) nuxt.options.css.push(template.dst)
for (const component in theme) { for (const component in theme) {
const template = (theme as any)[component]
const result = typeof template === 'function' ? template({ colors: options.colors }) : template
addTemplate({ addTemplate({
filename: `ui/${component}.ts`, filename: `ui/${component}.ts`,
write: true, write: true,
getContents: () => `export default ${JSON.stringify((theme as any)[component]({ colors: options.colors }), null, 2)}` getContents: () => `export default ${JSON.stringify(result, null, 2)}`
}) })
} }
@@ -55,25 +58,31 @@ export default function createTemplates (options: ModuleOptions, nuxt: Nuxt) {
[P in keyof T]: DeepPartial<T[P]> | { [key: string]: string | object } [P in keyof T]: DeepPartial<T[P]> | { [key: string]: string | object }
}> }>
type UI = { type AppConfigUI = {
primary: string
gray: string
} & typeof ui
type AppConfigInputUI = {
primary?: string primary?: string
gray?: string gray?: string
[key: string]: any
} & DeepPartial<typeof ui> } & DeepPartial<typeof ui>
declare module 'nuxt/schema' { declare module 'nuxt/schema' {
interface AppConfig { interface AppConfig {
ui: UI ui: AppConfigUI
} }
interface AppConfigInput { interface AppConfigInput {
ui?: UI ui?: AppConfigInputUI
} }
} }
declare module '@nuxt/schema' { declare module '@nuxt/schema' {
interface AppConfig { interface AppConfig {
ui: UI ui: AppConfigUI
} }
interface AppConfigInput { interface AppConfigInput {
ui?: UI ui?: AppConfigInputUI
} }
} }
export {} export {}

View File

@@ -1,4 +1,4 @@
export default (config: any) => ({ export default (config: { colors: string[] }) => ({
slots: { slots: {
base: 'rounded-md font-medium inline-flex items-center focus:outline-none focus-visible:outline-0 disabled:cursor-not-allowed disabled:opacity-75 shrink-0', base: 'rounded-md font-medium inline-flex items-center focus:outline-none focus-visible:outline-0 disabled:cursor-not-allowed disabled:opacity-75 shrink-0',
label: '', label: '',

View File

@@ -1,3 +1,3 @@
export default () => ({ export default {
base: 'max-w-7xl mx-auto px-4 sm:px-6 lg:px-8' base: 'max-w-7xl mx-auto px-4 sm:px-6 lg:px-8'
}) }

View File

@@ -1,3 +1,4 @@
export { default as button } from './button' export { default as button } from './button'
export { default as container } from './container' export { default as container } from './container'
export { default as icons } from './icons'
export { default as tooltip } from './tooltip' export { default as tooltip } from './tooltip'

View File

@@ -1,6 +1,6 @@
export default () => ({ export default {
slots: { slots: {
content: 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow rounded ring-1 ring-gray-200 dark:ring-gray-800 h-6 px-2 py-1 text-xs font-normal truncate relative', content: 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow rounded ring-1 ring-gray-200 dark:ring-gray-800 h-6 px-2 py-1 text-xs font-normal truncate relative',
arrow: 'fill-white dark:fill-gray-900' arrow: 'fill-white dark:fill-gray-900'
} }
}) }