chore: enable tw prefix

This commit is contained in:
zernonia 2024-06-18 10:42:55 +08:00
parent f1a2dab738
commit 511ae6a62e
3 changed files with 250 additions and 105 deletions

View File

@ -8,6 +8,7 @@ import type { registryBaseColorSchema } from '@/src/utils/registry/schema'
import { transformCssVars } from '@/src/utils/transformers/transform-css-vars' import { transformCssVars } from '@/src/utils/transformers/transform-css-vars'
import { transformImport } from '@/src/utils/transformers/transform-import' import { transformImport } from '@/src/utils/transformers/transform-import'
import { transformSFC } from '@/src/utils/transformers/transform-sfc' import { transformSFC } from '@/src/utils/transformers/transform-sfc'
import { transformTwPrefixes } from '@/src/utils/transformers/transform-tw-prefix'
export interface TransformOpts { export interface TransformOpts {
filename: string filename: string
@ -25,7 +26,7 @@ export type Transformer<Output = SourceFile> = (
const transformers: Transformer[] = [ const transformers: Transformer[] = [
transformCssVars, transformCssVars,
transformImport, transformImport,
// transformTwPrefixes, transformTwPrefixes,
] ]
const project = new Project({ const project = new Project({

View File

@ -0,0 +1,142 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`transform tailwind prefix 1`] = `
"const testVariants = cva(
"tw-bg-background hover:tw-bg-muted tw-text-primary-foreground sm:focus:tw-text-accent-foreground",
{
variants: {
variant: {
default:
"tw-bg-primary tw-text-primary-foreground hover:tw-bg-primary/90",
},
size: {
default: "tw-h-10 tw-px-4 tw-py-2",
},
},
},
);
"
`;
exports[`transform tailwind prefix 2`] = `
"<template>
<div
class="tw-bg-background hover:tw-bg-muted tw-text-primary-foreground sm:focus:tw-text-accent-foreground"
>
foo
</div>
</template>
"
`;
exports[`transform tailwind prefix 3`] = `
"<template>
<div
class="tw-bg-background hover:tw-bg-muted tw-text-primary-foreground sm:focus:tw-text-accent-foreground"
>
foo
</div>
</template>
"
`;
exports[`transform tailwind prefix 4`] = `
"<template>
<div
id="testing"
v-bind="props"
@click="handleSomething"
:data-test="true"
:class="
cn(
'tw-bg-background hover:tw-bg-muted',
true && 'tw-text-primary-foreground sm:focus:tw-text-accent-foreground',
)
"
>
foo
</div>
</template>
"
`;
exports[`transform tailwind prefix 5`] = `
"@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 224 71.4% 4.1%;
--muted: 220 14.3% 95.9%;
--muted-foreground: 220 8.9% 46.1%;
--popover: 0 0% 100%;
--popover-foreground: 224 71.4% 4.1%;
--card: 0 0% 100%;
--card-foreground: 224 71.4% 4.1%;
--border: 220 13% 91%;
--input: 220 13% 91%;
--primary: 220.9 39.3% 11%;
--primary-foreground: 210 20% 98%;
--secondary: 220 14.3% 95.9%;
--secondary-foreground: 220.9 39.3% 11%;
--accent: 220 14.3% 95.9%;
--accent-foreground: 220.9 39.3% 11%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 20% 98%;
--ring: 217.9 10.6% 64.9%;
--radius: 0.5rem;
}
.dark {
--background: 224 71.4% 4.1%;
--foreground: 210 20% 98%;
--muted: 215 27.9% 16.9%;
--muted-foreground: 217.9 10.6% 64.9%;
--popover: 224 71.4% 4.1%;
--popover-foreground: 210 20% 98%;
--card: 224 71.4% 4.1%;
--card-foreground: 210 20% 98%;
--border: 215 27.9% 16.9%;
--input: 215 27.9% 16.9%;
--primary: 210 20% 98%;
--primary-foreground: 220.9 39.3% 11%;
--secondary: 215 27.9% 16.9%;
--secondary-foreground: 210 20% 98%;
--accent: 215 27.9% 16.9%;
--accent-foreground: 210 20% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 85.7% 97.3%;
--ring: 215 27.9% 16.9%;
}
}
@layer base {
* {
@apply tw-border-border;
}
body {
@apply tw-bg-background tw-text-foreground;
}
}"
`;

View File

@ -1,111 +1,113 @@
import { it } from 'vitest' import { expect, it } from 'vitest'
import { transform } from '../../src/utils/transformers'
import { applyPrefixesCss } from '../../src/utils/transformers/transform-tw-prefix'
it('transform tailwind prefix', async () => { it('transform tailwind prefix', async () => {
// expect( expect(
// await transform({ await transform({
// filename: 'test.ts', filename: 'test.ts',
// raw: `const testVariants = cva( raw: `const testVariants = cva(
// 'bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground', 'bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground',
// { {
// variants: { variants: {
// variant: { variant: {
// default: 'bg-primary text-primary-foreground hover:bg-primary/90', default: 'bg-primary text-primary-foreground hover:bg-primary/90',
// }, },
// size: { size: {
// default: 'h-10 px-4 py-2', default: 'h-10 px-4 py-2',
// }, },
// }, },
// }, },
// )`, )`,
// config: { config: {
// tailwind: { tailwind: {
// baseColor: 'stone', baseColor: 'stone',
// prefix: 'tw-', prefix: 'tw-',
// }, },
// aliases: { aliases: {
// components: '@/components', components: '@/components',
// utils: '@/lib/utils', utils: '@/lib/utils',
// }, },
// }, },
// baseColor: 'stone', baseColor: 'stone',
// }), }),
// ).toMatchSnapshot() ).toMatchSnapshot()
// expect( expect(
// await transform({ await transform({
// filename: 'app.vue', filename: 'app.vue',
// raw: `<template> raw: `<template>
// <div class="bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground"> <div class="bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground">
// foo foo
// </div> </div>
// </template> </template>
// `, `,
// config: { config: {
// tailwind: { tailwind: {
// baseColor: 'stone', baseColor: 'stone',
// prefix: 'tw-', prefix: 'tw-',
// }, },
// aliases: { aliases: {
// components: '@/components', components: '@/components',
// utils: '@/lib/utils', utils: '@/lib/utils',
// }, },
// }, },
// baseColor: 'stone', baseColor: 'stone',
// }), }),
// ).toMatchSnapshot() ).toMatchSnapshot()
// expect( expect(
// await transform({ await transform({
// filename: 'app.vue', filename: 'app.vue',
// raw: `<template> raw: `<template>
// <div class="bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground"> <div class="bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground">
// foo foo
// </div> </div>
// </template> </template>
// `, `,
// config: { config: {
// tailwind: { tailwind: {
// baseColor: 'stone', baseColor: 'stone',
// cssVariables: false, cssVariables: false,
// prefix: 'tw-', prefix: 'tw-',
// }, },
// aliases: { aliases: {
// components: '@/components', components: '@/components',
// utils: '@/lib/utils', utils: '@/lib/utils',
// }, },
// }, },
// baseColor: stone, baseColor: 'stone',
// }), }),
// ).toMatchSnapshot() ).toMatchSnapshot()
// expect( expect(
// await transform({ await transform({
// filename: 'app.vue', filename: 'app.vue',
// raw: `<template> raw: `<template>
// <div id="testing" v-bind="props" @click="handleSomething" :data-test="true" :class="cn('bg-background hover:bg-muted', true && 'text-primary-foreground sm:focus:text-accent-foreground')"> <div id="testing" v-bind="props" @click="handleSomething" :data-test="true" :class="cn('bg-background hover:bg-muted', true && 'text-primary-foreground sm:focus:text-accent-foreground')">
// foo foo
// </div> </div>
// </template> </template>
// `, `,
// config: { config: {
// tailwind: { tailwind: {
// baseColor: 'stone', baseColor: 'stone',
// cssVariables: false, cssVariables: false,
// prefix: 'tw-', prefix: 'tw-',
// }, },
// aliases: { aliases: {
// components: '@/components', components: '@/components',
// utils: '@/lib/utils', utils: '@/lib/utils',
// }, },
// }, },
// baseColor: stone, baseColor: 'stone',
// }), }),
// ).toMatchSnapshot() ).toMatchSnapshot()
// expect( expect(
// applyPrefixesCss( applyPrefixesCss(
// '@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n \n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n \n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n \n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n \n --border: 220 13% 91%;\n --input: 220 13% 91%;\n \n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n \n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n \n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n \n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n \n --ring: 217.9 10.6% 64.9%;\n \n --radius: 0.5rem;\n }\n \n .dark {\n --background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n \n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n \n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n \n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n \n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n \n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n \n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n \n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n \n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 85.7% 97.3%;\n \n --ring: 215 27.9% 16.9%;\n }\n}\n \n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}', '@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n \n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n \n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n \n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n \n --border: 220 13% 91%;\n --input: 220 13% 91%;\n \n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n \n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n \n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n \n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n \n --ring: 217.9 10.6% 64.9%;\n \n --radius: 0.5rem;\n }\n \n .dark {\n --background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n \n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n \n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n \n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n \n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n \n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n \n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n \n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n \n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 85.7% 97.3%;\n \n --ring: 215 27.9% 16.9%;\n }\n}\n \n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}',
// 'tw-', 'tw-',
// ), ),
// ).toMatchSnapshot() ).toMatchSnapshot()
}) })