shadcn-vue 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -19
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -764,25 +764,7 @@ import { camelize, getCurrentInstance, toHandlerKey } from 'vue'
|
|
|
764
764
|
export function cn(...inputs: ClassValue[]) {
|
|
765
765
|
return twMerge(clsx(inputs))
|
|
766
766
|
}
|
|
767
|
-
|
|
768
|
-
export function useEmitAsProps<Name extends string>(
|
|
769
|
-
emit: (name: Name, ...args: any[]) => void,
|
|
770
|
-
) {
|
|
771
|
-
const vm = getCurrentInstance()
|
|
772
|
-
|
|
773
|
-
const events = vm?.type.emits as Name[]
|
|
774
|
-
const result: Record<string, any> = {}
|
|
775
|
-
if (!events?.length) {
|
|
776
|
-
console.warn(
|
|
777
|
-
\`No emitted event found. Please check component: \${vm?.type.__name}\`,
|
|
778
|
-
)
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
events?.forEach((ev) => {
|
|
782
|
-
result[toHandlerKey(camelize(ev))] = (...arg: any) => emit(ev, ...arg)
|
|
783
|
-
})
|
|
784
|
-
return result
|
|
785
|
-
}`;
|
|
767
|
+
`;
|
|
786
768
|
var TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */
|
|
787
769
|
module.exports = {
|
|
788
770
|
darkMode: ["class"],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/utils/transformers/index.ts","../src/utils/transformers/transform-css-vars.ts","../src/utils/transformers/transform-import.ts","../src/utils/transformers/transform-sfc.ts","../src/utils/get-config.ts","../src/utils/resolve-import.ts","../src/utils/get-package-manager.ts","../src/utils/logger.ts","../src/utils/handle-error.ts","../src/utils/registry/index.ts","../src/utils/registry/schema.ts","../src/commands/diff.ts","../src/commands/init.ts","../src/utils/templates.ts","../src/utils/get-package-info.ts"],"sourcesContent":["#!/usr/bin/env node\nimport process from 'node:process'\n\nimport { Command } from 'commander'\n\nimport { add } from '@/src/commands/add'\nimport { diff } from '@/src/commands/diff'\nimport { init } from '@/src/commands/init'\nimport { getPackageInfo } from '@/src/utils/get-package-info'\n\nprocess.on('SIGINT', () => process.exit(0))\nprocess.on('SIGTERM', () => process.exit(0))\n\nasync function main() {\n const packageInfo = await getPackageInfo()\n\n const program = new Command()\n .name('shadcn-vue')\n .description('add components and dependencies to your project')\n .version(\n packageInfo.version || '1.0.0',\n '-v, --version',\n 'display the version number',\n )\n\n program.addCommand(init).addCommand(add).addCommand(diff)\n\n program.parse()\n}\n\nmain()\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { execa } from 'execa'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport * as z from 'zod'\nimport { transform } from '@/src/utils/transformers'\nimport { getConfig } from '@/src/utils/get-config'\nimport { getPackageManager } from '@/src/utils/get-package-manager'\nimport { handleError } from '@/src/utils/handle-error'\nimport { logger } from '@/src/utils/logger'\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getRegistryIndex,\n resolveTree,\n} from '@/src/utils/registry'\n\nconst addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n})\n\nexport const add = new Command()\n .name('add')\n .description('add a component to your project')\n .argument('[components...]', 'the components to add')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option('-o, --overwrite', 'overwrite existing files.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .option('-a, --all', 'add all available components', false)\n .option('-p, --path <path>', 'the path to add the component to.')\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${chalk.green('init')} to create a components.json file.`,\n )\n process.exit(1)\n }\n\n const registryIndex = await getRegistryIndex()\n\n let selectedComponents = options.all\n ? registryIndex.map(entry => entry.name)\n : options.components\n if (!options.components?.length && !options.all) {\n const { components } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n hint: 'Space to select. A to toggle all. Enter to submit.',\n instructions: false,\n choices: registryIndex.map(entry => ({\n title: entry.name,\n value: entry.name,\n selected: options.all\n ? true\n : options.components?.includes(entry.name),\n })),\n })\n selectedComponents = components\n }\n\n if (!selectedComponents?.length) {\n logger.warn('No components selected. Exiting.')\n process.exit(0)\n }\n\n const tree = await resolveTree(registryIndex, selectedComponents)\n const payload = await fetchTree(config.style, tree)\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n if (!payload.length) {\n logger.warn('Selected components not found. Exiting.')\n process.exit(0)\n }\n\n if (!options.yes) {\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: 'Ready to install components and dependencies. Proceed?',\n initial: true,\n })\n\n if (!proceed)\n process.exit(0)\n }\n\n const spinner = ora('Installing components...').start()\n const skippedDeps = new Set<string>()\n for (const item of payload) {\n spinner.text = `Installing ${item.name}...`\n const targetDir = getItemTargetPath(\n config,\n item,\n options.path ? path.resolve(cwd, options.path) : undefined,\n )\n\n if (!targetDir)\n continue\n\n if (!existsSync(targetDir))\n await fs.mkdir(targetDir, { recursive: true })\n\n const existingComponent = item.files.filter(file =>\n existsSync(path.resolve(targetDir, item.name, file.name)),\n )\n\n if (existingComponent.length && !options.overwrite) {\n if (selectedComponents.includes(item.name)) {\n spinner.stop()\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Component ${item.name} already exists. Would you like to overwrite?`,\n initial: false,\n })\n\n if (!overwrite) {\n logger.info(\n `Skipped ${item.name}. To overwrite, run with the ${chalk.green(\n '--overwrite',\n )} flag.`,\n )\n continue\n }\n\n spinner.start(`Installing ${item.name}...`)\n }\n else {\n continue\n }\n }\n\n for (const file of item.files) {\n const componentDir = path.resolve(targetDir, item.name)\n let filePath = path.resolve(\n targetDir,\n item.name,\n file.name,\n )\n\n if (!config.typescript)\n filePath = filePath.replace(/\\.ts$/, '.js')\n\n if (!existsSync(componentDir))\n await fs.mkdir(componentDir, { recursive: true })\n\n // Run transformers.\n const content = await transform({\n filename: file.name,\n raw: file.content,\n config,\n baseColor,\n })\n\n await fs.writeFile(filePath, content)\n }\n\n // Install dependencies.\n if (item.dependencies?.length) {\n item.dependencies.forEach(dep =>\n skippedDeps.add(dep),\n )\n\n const packageManager = await getPackageManager(cwd)\n await execa(\n packageManager,\n [\n packageManager === 'npm' ? 'install' : 'add',\n ...item.dependencies,\n ],\n {\n cwd,\n },\n )\n }\n }\n spinner.succeed('Done.')\n }\n catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { Project, ScriptKind, type SourceFile } from 'ts-morph'\nimport type * as z from 'zod'\nimport type { Config } from '@/src/utils/get-config'\nimport type { registryBaseColorSchema } from '@/src/utils/registry/schema'\nimport { transformCssVars } from '@/src/utils/transformers/transform-css-vars'\nimport { transformImport } from '@/src/utils/transformers/transform-import'\nimport { transformSFC } from '@/src/utils/transformers/transform-sfc'\n\nexport interface TransformOpts {\n filename: string\n raw: string\n config: Config\n baseColor?: z.infer<typeof registryBaseColorSchema>\n}\n\nexport type Transformer<Output = SourceFile> = (\n opts: TransformOpts & {\n sourceFile: SourceFile\n }\n) => Promise<Output>\n\nconst transformers: Transformer[] = [\n transformCssVars,\n transformImport,\n]\n\nconst project = new Project({\n compilerOptions: {},\n})\n\nasync function createTempSourceFile(filename: string) {\n const dir = await fs.mkdtemp(path.join(tmpdir(), 'shadcn-'))\n return path.join(dir, filename)\n}\n\nexport async function transform(opts: TransformOpts) {\n const tempFile = await createTempSourceFile(opts.filename)\n const sourceFile = project.createSourceFile(tempFile, opts.raw, {\n scriptKind: ScriptKind.Unknown,\n })\n\n for (const transformer of transformers)\n transformer({ sourceFile, ...opts })\n\n return await transformSFC({\n sourceFile,\n ...opts,\n })\n}\n","import { SyntaxKind } from 'ts-morph'\nimport type * as z from 'zod'\nimport type { registryBaseColorSchema } from '@/src/utils/registry/schema'\nimport type { Transformer } from '@/src/utils/transformers'\n\nexport const transformCssVars: Transformer = async ({\n sourceFile,\n config,\n baseColor,\n}) => {\n // No transform if using css variables.\n if (config.tailwind?.cssVariables || !baseColor?.inlineColors)\n return sourceFile\n\n sourceFile.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach((node) => {\n const value = node.getText()\n\n if (value.includes('cn(')) {\n const splitted = value.split('\\'').map(i => applyColorMapping(i, baseColor.inlineColors))\n node.replaceWithText(`${splitted.join('\\'')}`)\n }\n else if (value) {\n const valueWithColorMapping = applyColorMapping(\n value.replace(/\"/g, ''),\n baseColor.inlineColors,\n )\n node.replaceWithText(`\"${valueWithColorMapping.trim()}\"`)\n }\n })\n\n return sourceFile\n}\n\n// Splits a className into variant-name-alpha.\n// eg. hover:bg-primary-100 -> [hover, bg-primary, 100]\nexport function splitClassName(className: string): (string | null)[] {\n if (!className.includes('/') && !className.includes(':'))\n return [null, className, null]\n\n const parts: (string | null)[] = []\n // First we split to find the alpha.\n const [rest, alpha] = className.split('/')\n\n // Check if rest has a colon.\n if (!rest.includes(':'))\n return [null, rest, alpha]\n\n // Next we split the rest by the colon.\n const split = rest.split(':')\n\n // We take the last item from the split as the name.\n const name = split.pop()\n\n // We glue back the rest of the split.\n const variant = split.join(':')\n\n // Finally we push the variant, name and alpha.\n parts.push(variant ?? null, name ?? null, alpha ?? null)\n\n return parts\n}\n\nconst PREFIXES = ['bg-', 'text-', 'border-', 'ring-offset-', 'ring-']\n\nexport function applyColorMapping(\n input: string,\n mapping: z.infer<typeof registryBaseColorSchema>['inlineColors'],\n) {\n // Handle border classes.\n if (input.includes(' border '))\n input = input.replace(' border ', ' border border-border ')\n\n // Build color mappings.\n const classNames = input.split(' ')\n const lightMode: string[] = []\n const darkMode: string[] = []\n for (const className of classNames) {\n const [variant, value, modifier] = splitClassName(className)\n const prefix = PREFIXES.find(prefix => value?.startsWith(prefix))\n if (!prefix) {\n if (!lightMode.includes(className))\n lightMode.push(className)\n\n continue\n }\n\n const needle = value?.replace(prefix, '')\n if (needle && needle in mapping.light) {\n lightMode.push(\n [variant, `${prefix}${mapping.light[needle]}`]\n .filter(Boolean)\n .join(':') + (modifier ? `/${modifier}` : ''),\n )\n\n darkMode.push(\n ['dark', variant, `${prefix}${mapping.dark[needle]}`]\n .filter(Boolean)\n .join(':') + (modifier ? `/${modifier}` : ''),\n )\n continue\n }\n\n if (!lightMode.includes(className))\n lightMode.push(className)\n }\n\n return `${lightMode.join(' ')} ${darkMode.join(' ').trim()}`\n}\n","import type { Transformer } from '@/src/utils/transformers'\n\nexport const transformImport: Transformer = async ({ sourceFile, config }) => {\n const importDeclarations = sourceFile.getImportDeclarations()\n\n for (const importDeclaration of importDeclarations) {\n const moduleSpecifier = importDeclaration.getModuleSpecifierValue()\n\n // Replace @/lib/registry/[style] with the components alias.\n if (moduleSpecifier.startsWith('@/lib/registry/')) {\n importDeclaration.setModuleSpecifier(\n moduleSpecifier.replace(\n /^@\\/lib\\/registry\\/[^/]+/,\n config.aliases.components,\n ),\n )\n }\n\n // Replace `import { cn } from \"@/lib/utils\"`\n if (moduleSpecifier === '@/lib/utils') {\n const namedImports = importDeclaration.getNamedImports()\n const cnImport = namedImports.find(i => i.getName() === 'cn')\n if (cnImport) {\n importDeclaration.setModuleSpecifier(\n moduleSpecifier.replace(/^@\\/lib\\/utils/, config.aliases.utils),\n )\n }\n }\n }\n\n return sourceFile\n}\n","import { createRequire } from 'node:module'\nimport type { Transformer } from '@/src/utils/transformers'\n\n// required cause Error: Dynamic require of \"@babel/core\" is not supported\nconst require = createRequire(import.meta.url)\nconst { transform } = require('detype')\n\nexport async function transformByDetype(content: string, filename: string) {\n return await transform(content, filename, {\n removeTsComments: true,\n })\n}\n\nexport const transformSFC: Transformer<string> = async ({ sourceFile, config }) => {\n const output = sourceFile?.getFullText()\n if (config?.typescript)\n return output\n\n return await transformByDetype(output, 'app.vue')\n}\n","import path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { cosmiconfig } from 'cosmiconfig'\nimport type { ConfigLoaderResult } from 'tsconfig-paths'\nimport { loadConfig } from 'tsconfig-paths'\nimport * as z from 'zod'\nimport { resolveImport } from '@/src/utils/resolve-import'\n\nexport const DEFAULT_STYLE = 'default'\nexport const DEFAULT_COMPONENTS = '@/components'\nexport const DEFAULT_UTILS = '@/lib/utils'\nexport const DEFAULT_TAILWIND_CONFIG = 'tailwind.config.js'\nexport const DEFAULT_TAILWIND_BASE_COLOR = 'slate'\n\nexport const TAILWIND_CSS_PATH = {\n nuxt: 'assets/css/tailwind.css',\n vite: 'src/assets/index.css',\n laravel: 'resources/css/app.css',\n}\n\n// TODO: Figure out if we want to support all cosmiconfig formats.\n// A simple components.json file would be nice.\nconst explorer = cosmiconfig('components', {\n searchPlaces: ['components.json'],\n})\n\nexport const rawConfigSchema = z\n .object({\n $schema: z.string().optional(),\n style: z.string(),\n typescript: z.boolean().default(true),\n tailwind: z.object({\n config: z.string(),\n css: z.string(),\n baseColor: z.string(),\n cssVariables: z.boolean().default(true),\n }),\n framework: z.string().default('Vite'),\n aliases: z.object({\n components: z.string(),\n utils: z.string(),\n }),\n })\n .strict()\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>\n\nexport const configSchema = rawConfigSchema\n .extend({\n resolvedPaths: z.object({\n tailwindConfig: z.string(),\n tailwindCss: z.string(),\n utils: z.string(),\n components: z.string(),\n }),\n })\n\nexport type Config = z.infer<typeof configSchema>\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd)\n\n if (!config)\n return null\n\n return await resolveConfigPaths(cwd, config)\n}\n\nexport async function resolveConfigPaths(cwd: string, config: RawConfig) {\n let tsConfig: ConfigLoaderResult | undefined\n let tsConfigPath = path.resolve(\n cwd,\n config.framework === 'nuxt' ? '.nuxt/tsconfig.json' : './tsconfig.json',\n )\n\n if (config.typescript) {\n // Read tsconfig.json.\n tsConfig = loadConfig(tsConfigPath)\n // In new Vue project, tsconfig has references to tsconfig.app.json, which is causing the path not resolving correctly\n // If no paths were found, try to load tsconfig.app.json.\n if ('paths' in tsConfig && Object.keys(tsConfig.paths).length === 0) {\n tsConfigPath = path.resolve(cwd, './tsconfig.app.json')\n if (existsSync(tsConfigPath))\n tsConfig = loadConfig(tsConfigPath)\n }\n }\n else {\n tsConfigPath = path.resolve(cwd, './jsconfig.json')\n tsConfig = loadConfig(tsConfigPath)\n }\n\n if (tsConfig.resultType === 'failed') {\n throw new Error(\n `Failed to load ${tsConfigPath}. ${tsConfig.message ?? ''}`.trim(),\n )\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n tailwindConfig: path.resolve(cwd, config.tailwind.config),\n tailwindCss: path.resolve(cwd, config.tailwind.css),\n utils: resolveImport(config.aliases.utils, tsConfig),\n components: resolveImport(config.aliases.components, tsConfig),\n },\n })\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd)\n\n if (!configResult)\n return null\n\n return rawConfigSchema.parse(configResult.config)\n }\n catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`)\n }\n}\n","import { type ConfigLoaderSuccessResult, createMatchPath } from 'tsconfig-paths'\n\nexport function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, 'absoluteBaseUrl' | 'paths'>,\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n ['.ts', '.tsx', '.vue'],\n )\n}\n","import { detect } from '@antfu/ni'\n\nexport async function getPackageManager(\n targetDir: string,\n): Promise<'yarn' | 'pnpm' | 'bun' | 'npm'> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === 'yarn@berry')\n return 'yarn'\n if (packageManager === 'pnpm@6')\n return 'pnpm'\n if (packageManager === 'bun')\n return 'bun'\n\n return packageManager ?? 'npm'\n}\n","import chalk from 'chalk'\n\nexport const logger = {\n error(...args: unknown[]) {\n console.log(chalk.red(...args))\n },\n warn(...args: unknown[]) {\n console.log(chalk.yellow(...args))\n },\n info(...args: unknown[]) {\n console.log(chalk.cyan(...args))\n },\n success(...args: unknown[]) {\n console.log(chalk.green(...args))\n },\n break() {\n console.log('')\n },\n}\n","import { logger } from './logger'\n\nexport function handleError(error: unknown) {\n if (typeof error === 'string') {\n logger.error(error)\n process.exit(1)\n }\n\n if (error instanceof Error) {\n logger.error(error.message)\n process.exit(1)\n }\n\n logger.error('Something went wrong. Please try again.')\n process.exit(1)\n}\n","import path from 'node:path'\nimport process from 'node:process'\nimport { HttpsProxyAgent } from 'https-proxy-agent'\nimport fetch from 'node-fetch'\nimport type * as z from 'zod'\nimport {\n registryBaseColorSchema,\n registryIndexSchema,\n registryWithContentSchema,\n stylesSchema,\n} from '@/src/utils/registry/schema'\nimport type { registryItemWithContentSchema } from '@/src/utils/registry/schema'\nimport type { Config } from '@/src/utils/get-config'\n\nconst baseUrl = process.env.COMPONENTS_REGISTRY_URL ?? 'https://www.shadcn-vue.com'\nconst agent = process.env.https_proxy\n ? new HttpsProxyAgent(process.env.https_proxy)\n : undefined\n\nexport async function getRegistryIndex() {\n try {\n const [result] = await fetchRegistry(['index.json'])\n\n return registryIndexSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch components from registry.')\n }\n}\n\nexport async function getRegistryStyles() {\n try {\n const [result] = await fetchRegistry(['styles/index.json'])\n\n return stylesSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch styles from registry.')\n }\n}\n\nexport function getRegistryBaseColors() {\n return [\n {\n name: 'slate',\n label: 'Slate',\n },\n {\n name: 'gray',\n label: 'Gray',\n },\n {\n name: 'zinc',\n label: 'Zinc',\n },\n {\n name: 'neutral',\n label: 'Neutral',\n },\n {\n name: 'stone',\n label: 'Stone',\n },\n ]\n}\n\nexport async function getRegistryBaseColor(baseColor: string) {\n try {\n const [result] = await fetchRegistry([`colors/${baseColor}.json`])\n\n return registryBaseColorSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch base color from registry.')\n }\n}\n\nexport async function resolveTree(\n index: z.infer<typeof registryIndexSchema>,\n names: string[],\n) {\n const tree: z.infer<typeof registryIndexSchema> = []\n\n for (const name of names) {\n const entry = index.find(entry => entry.name === name)\n\n if (!entry)\n continue\n\n tree.push(entry)\n\n if (entry.registryDependencies) {\n const dependencies = await resolveTree(index, entry.registryDependencies)\n tree.push(...dependencies)\n }\n }\n\n return tree.filter(\n (component, index, self) =>\n self.findIndex(c => c.name === component.name) === index,\n )\n}\n\nexport async function fetchTree(\n style: string,\n tree: z.infer<typeof registryIndexSchema>,\n) {\n try {\n const paths = tree.map(item => `styles/${style}/${item.name}.json`)\n const result = await fetchRegistry(paths)\n\n return registryWithContentSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch tree from registry.')\n }\n}\n\nexport function getItemTargetPath(\n config: Config,\n item: Pick<z.infer<typeof registryItemWithContentSchema>, 'type'>,\n override?: string,\n) {\n // Allow overrides for all items but ui.\n if (override && item.type !== 'components:ui')\n return override\n\n const [parent, type] = item.type.split(':')\n if (!(parent in config.resolvedPaths))\n return null\n\n return path.join(\n config.resolvedPaths[parent as keyof typeof config.resolvedPaths],\n type,\n )\n}\n\nasync function fetchRegistry(paths: string[]) {\n try {\n const results = await Promise.all(\n paths.map(async (path) => {\n const response = await fetch(`${baseUrl}/registry/${path}`, {\n agent,\n })\n return await response.json()\n }),\n )\n return results\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.log(error)\n throw new Error(`Failed to fetch registry from ${baseUrl}.`)\n }\n}\n","import * as z from 'zod'\n\n// TODO: Extract this to a shared package.\nexport const registryItemSchema = z.object({\n name: z.string(),\n dependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(z.string()),\n type: z.enum(['components:ui', 'components:component', 'components:example']),\n})\n\nexport const registryIndexSchema = z.array(registryItemSchema)\n\nexport const registryItemWithContentSchema = registryItemSchema.extend({\n files: z.array(\n z.object({\n name: z.string(),\n content: z.string(),\n }),\n ),\n})\n\nexport const registryWithContentSchema = z.array(registryItemWithContentSchema)\n\nexport const stylesSchema = z.array(\n z.object({\n name: z.string(),\n label: z.string(),\n }),\n)\n\nexport const registryBaseColorSchema = z.object({\n inlineColors: z.object({\n light: z.record(z.string(), z.string()),\n dark: z.record(z.string(), z.string()),\n }),\n cssVars: z.object({\n light: z.record(z.string(), z.string()),\n dark: z.record(z.string(), z.string()),\n }),\n inlineColorsTemplate: z.string(),\n cssVarsTemplate: z.string(),\n})\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { type Change, diffLines } from 'diff'\nimport * as z from 'zod'\nimport type { Config } from '@/src/utils/get-config'\nimport { getConfig } from '@/src/utils/get-config'\nimport { handleError } from '@/src/utils/handle-error'\nimport { logger } from '@/src/utils/logger'\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getRegistryIndex,\n} from '@/src/utils/registry'\nimport type { registryIndexSchema } from '@/src/utils/registry/schema'\nimport { transform } from '@/src/utils/transformers'\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name('diff')\n .description('check for updates against the registry')\n .argument('[component]', 'the component name')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${chalk.green(\n 'init',\n )} to create a components.json file.`,\n )\n process.exit(1)\n }\n\n const registryIndex = await getRegistryIndex()\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files) {\n const filePath = path.resolve(targetDir, file)\n if (existsSync(filePath))\n return true\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info('No updates found.')\n process.exit(0)\n }\n\n logger.info('The following components have updates available:')\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes)\n logger.info(` - ${change.filePath}`)\n }\n logger.break()\n logger.info(\n `Run ${chalk.green('diff <component>')} to see the changes.`,\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n item => item.name === options.component,\n )\n\n if (!component) {\n logger.error(\n `The component ${chalk.green(options.component)} does not exist.`,\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n printDiff(change.patch)\n logger.info('')\n }\n }\n catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config,\n) {\n const payload = await fetchTree(config.style, [component])\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir)\n continue\n\n for (const file of item.files) {\n const filePath = path.resolve(targetDir, file.name)\n\n if (!existsSync(filePath))\n continue\n\n const fileContent = await fs.readFile(filePath, 'utf8')\n\n const registryContent = await transform({\n filename: file.name,\n raw: file.content,\n config,\n baseColor,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n file: file.name,\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\n// TODO: Does is it need to async?\nfunction printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added)\n return process.stdout.write(chalk.green(part.value))\n\n if (part.removed)\n return process.stdout.write(chalk.red(part.value))\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { execa } from 'execa'\nimport template from 'lodash.template'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport * as z from 'zod'\nimport * as templates from '../utils/templates'\nimport {\n getRegistryBaseColor,\n getRegistryBaseColors,\n getRegistryStyles,\n} from '../utils/registry'\nimport { logger } from '../utils/logger'\nimport { handleError } from '../utils/handle-error'\nimport { getPackageManager } from '../utils/get-package-manager'\nimport { transformByDetype } from '../utils/transformers/transform-sfc'\nimport {\n type Config,\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_UTILS,\n TAILWIND_CSS_PATH,\n getConfig,\n rawConfigSchema,\n resolveConfigPaths,\n} from '../utils/get-config'\n\nconst PROJECT_DEPENDENCIES = {\n base: [\n 'tailwindcss-animate',\n 'class-variance-authority',\n 'clsx',\n 'tailwind-merge',\n ],\n nuxt: [\n '@nuxtjs/tailwindcss',\n ],\n}\n\nconst initOptionsSchema = z.object({\n cwd: z.string(),\n yes: z.boolean(),\n})\n\nexport const init = new Command()\n .name('init')\n .description('initialize your project and install dependencies')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .action(async (opts) => {\n try {\n const options = initOptionsSchema.parse(opts)\n const cwd = path.resolve(options.cwd)\n\n // Ensure target directory exists.\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n // Read config.\n const existingConfig = await getConfig(cwd)\n const config = await promptForConfig(cwd, existingConfig, options.yes)\n\n await runInit(cwd, config)\n\n logger.info('')\n logger.info(\n `${chalk.green('Success!')} Project initialization completed.`,\n )\n logger.info('')\n }\n catch (error) {\n handleError(error)\n }\n })\n\nexport async function promptForConfig(\n cwd: string,\n defaultConfig: Config | null = null,\n skip = false,\n) {\n const highlight = (text: string) => chalk.cyan(text)\n\n const styles = await getRegistryStyles()\n const baseColors = await getRegistryBaseColors()\n\n const options = await prompts([\n {\n type: 'toggle',\n name: 'typescript',\n message: `Would you like to use ${highlight('TypeScript')} (recommended)?`,\n initial: defaultConfig?.typescript ?? true,\n active: 'yes',\n inactive: 'no',\n },\n {\n type: 'select',\n name: 'framework',\n message: `Which ${highlight('framework')} are you using?`,\n choices: [\n { title: 'Vite', value: 'vite' },\n { title: 'Nuxt', value: 'nuxt' },\n { title: 'Laravel', value: 'laravel' },\n ],\n },\n {\n type: 'select',\n name: 'style',\n message: `Which ${highlight('style')} would you like to use?`,\n choices: styles.map(style => ({\n title: style.label,\n value: style.name,\n })),\n },\n {\n type: 'select',\n name: 'tailwindBaseColor',\n message: `Which color would you like to use as ${highlight(\n 'base color',\n )}?`,\n choices: baseColors.map(color => ({\n title: color.label,\n value: color.name,\n })),\n },\n {\n type: 'text',\n name: 'tailwindCss',\n message: `Where is your ${highlight('Tailwind CSS')} file?`,\n initial: (prev, values) => defaultConfig?.tailwind.css ?? TAILWIND_CSS_PATH[values.framework as 'vite' | 'nuxt' | 'laravel'],\n },\n {\n type: 'toggle',\n name: 'tailwindCssVariables',\n message: `Would you like to use ${highlight(\n 'CSS variables',\n )} for colors?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: 'yes',\n inactive: 'no',\n },\n {\n type: 'text',\n name: 'tailwindConfig',\n message: `Where is your ${highlight('tailwind.config.js')} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: 'text',\n name: 'components',\n message: `Configure the import alias for ${highlight('components')}:`,\n initial: defaultConfig?.aliases.components ?? DEFAULT_COMPONENTS,\n },\n {\n type: 'text',\n name: 'utils',\n message: `Configure the import alias for ${highlight('utils')}:`,\n initial: defaultConfig?.aliases.utils ?? DEFAULT_UTILS,\n },\n ])\n\n const config = rawConfigSchema.parse({\n // $schema: 'https://ui.shadcn.com/schema.json',\n style: options.style,\n typescript: options.typescript,\n framework: options.framework,\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: options.tailwindBaseColor,\n cssVariables: options.tailwindCssVariables,\n },\n aliases: {\n utils: options.utils,\n components: options.components,\n },\n })\n\n if (!skip) {\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: `Write configuration to ${highlight('components.json')}. Proceed?`,\n initial: true,\n })\n\n if (!proceed)\n process.exit(0)\n }\n\n // Write to file.\n logger.info('')\n const spinner = ora('Writing components.json...').start()\n const targetPath = path.resolve(cwd, 'components.json')\n await fs.writeFile(targetPath, JSON.stringify(config, null, 2), 'utf8')\n spinner.succeed()\n\n return await resolveConfigPaths(cwd, config)\n}\n\nexport async function runInit(cwd: string, config: Config) {\n const spinner = ora('Initializing project...')?.start()\n\n // Ensure all resolved paths directories exist.\n for (const [key, resolvedPath] of Object.entries(config.resolvedPaths)) {\n // Determine if the path is a file or directory.\n // TODO: is there a better way to do this?\n let dirname = path.extname(resolvedPath)\n ? path.dirname(resolvedPath)\n : resolvedPath\n\n // If the utils alias is set to something like \"@/lib/utils\",\n // assume this is a file and remove the \"utils\" file name.\n // TODO: In future releases we should add support for individual utils.\n if (key === 'utils' && resolvedPath.endsWith('/utils')) {\n // Remove /utils at the end.\n dirname = dirname.replace(/\\/utils$/, '')\n }\n\n if (!existsSync(dirname))\n await fs.mkdir(dirname, { recursive: true })\n }\n\n const extension = config.typescript ? 'ts' : 'js'\n\n // Write tailwind config.\n await fs.writeFile(\n config.resolvedPaths.tailwindConfig,\n config.tailwind.cssVariables\n ? template(templates.TAILWIND_CONFIG_WITH_VARIABLES)({ extension, framework: config.framework })\n : template(templates.TAILWIND_CONFIG)({ extension, framework: config.framework }),\n 'utf8',\n )\n\n // Write css file.\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n if (baseColor) {\n await fs.writeFile(\n config.resolvedPaths.tailwindCss,\n config.tailwind.cssVariables\n ? baseColor.cssVarsTemplate\n : baseColor.inlineColorsTemplate,\n 'utf8',\n )\n }\n\n // Write cn file.\n await fs.writeFile(\n `${config.resolvedPaths.utils}.${extension}`,\n extension === 'ts' ? templates.UTILS : await transformByDetype(templates.UTILS, '.ts'),\n 'utf8',\n )\n\n spinner?.succeed()\n\n // Install dependencies.\n const dependenciesSpinner = ora('Installing dependencies...')?.start()\n const packageManager = await getPackageManager(cwd)\n\n const deps = PROJECT_DEPENDENCIES.base.concat(\n config.framework === 'nuxt' ? PROJECT_DEPENDENCIES.nuxt : [],\n ).concat(\n config.style === 'new-york' ? ['@radix-icons/vue'] : ['lucide-vue-next'],\n ).filter(Boolean)\n\n await execa(\n packageManager,\n [packageManager === 'npm' ? 'install' : 'add', ...deps],\n {\n cwd,\n },\n )\n dependenciesSpinner?.succeed()\n}\n","export const UTILS = `import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { camelize, getCurrentInstance, toHandlerKey } from 'vue'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function useEmitAsProps<Name extends string>(\n emit: (name: Name, ...args: any[]) => void,\n) {\n const vm = getCurrentInstance()\n\n const events = vm?.type.emits as Name[]\n const result: Record<string, any> = {}\n if (!events?.length) {\n console.warn(\n \\`No emitted event found. Please check component: \\${vm?.type.__name}\\`,\n )\n }\n\n events?.forEach((ev) => {\n result[toHandlerKey(camelize(ev))] = (...arg: any) => emit(ev, ...arg)\n })\n return result\n}`\n\nexport const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n darkMode: [\"class\"],\n content: [\n './pages/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './components/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './app/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './src/**/*.{<%- extension %>,<%- extension %>x,vue}',\n\t],\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n keyframes: {\n \"accordion-down\": {\n from: { height: 0 },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: 0 },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n}`\n\nexport const TAILWIND_CONFIG_WITH_VARIABLES = `/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n darkMode: [\"class\"],\n <% if (framework === 'vite') { %>\n content: [\n './pages/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './components/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './app/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './src/**/*.{<%- extension %>,<%- extension %>x,vue}',\n\t],\n <% } else if (framework === 'laravel') { %>\n content: [\n \"./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php\",\n \"./storage/framework/views/*.php\",\n \"./resources/views/**/*.blade.php\",\n \"./resources/js/**/*.{<%- extension %>,<%- extension %>x,vue}\",\n ],\n <% } %>\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: 0 },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: 0 },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n}`\n","import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport fs from 'fs-extra'\nimport { type PackageJson } from 'type-fest'\n\nexport function getPackageInfo() {\n const packageJsonPath = getPackageFilePath('../package.json')\n\n return fs.readJSONSync(packageJsonPath) as PackageJson\n}\n\nfunction getPackageFilePath(filePath: string) {\n const distPath = fileURLToPath(new URL('.', import.meta.url))\n\n return path.resolve(distPath, filePath)\n}\n"],"mappings":"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","names":["process","Command","existsSync","fs","path","process","chalk","z","prefix","require","transform","path","path","path","process","z","process","entry","index","path","process","path","existsSync","chalk","components","fs","transform","existsSync","fs","path","process","chalk","Command","z","Command","process","path","existsSync","chalk","component","changes","fs","transform","diff","existsSync","fs","path","process","chalk","Command","execa","ora","prompts","z","Command","process","path","existsSync","chalk","prompts","ora","fs","execa","path","fs","process","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/utils/transformers/index.ts","../src/utils/transformers/transform-css-vars.ts","../src/utils/transformers/transform-import.ts","../src/utils/transformers/transform-sfc.ts","../src/utils/get-config.ts","../src/utils/resolve-import.ts","../src/utils/get-package-manager.ts","../src/utils/logger.ts","../src/utils/handle-error.ts","../src/utils/registry/index.ts","../src/utils/registry/schema.ts","../src/commands/diff.ts","../src/commands/init.ts","../src/utils/templates.ts","../src/utils/get-package-info.ts"],"sourcesContent":["#!/usr/bin/env node\nimport process from 'node:process'\n\nimport { Command } from 'commander'\n\nimport { add } from '@/src/commands/add'\nimport { diff } from '@/src/commands/diff'\nimport { init } from '@/src/commands/init'\nimport { getPackageInfo } from '@/src/utils/get-package-info'\n\nprocess.on('SIGINT', () => process.exit(0))\nprocess.on('SIGTERM', () => process.exit(0))\n\nasync function main() {\n const packageInfo = await getPackageInfo()\n\n const program = new Command()\n .name('shadcn-vue')\n .description('add components and dependencies to your project')\n .version(\n packageInfo.version || '1.0.0',\n '-v, --version',\n 'display the version number',\n )\n\n program.addCommand(init).addCommand(add).addCommand(diff)\n\n program.parse()\n}\n\nmain()\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { execa } from 'execa'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport * as z from 'zod'\nimport { transform } from '@/src/utils/transformers'\nimport { getConfig } from '@/src/utils/get-config'\nimport { getPackageManager } from '@/src/utils/get-package-manager'\nimport { handleError } from '@/src/utils/handle-error'\nimport { logger } from '@/src/utils/logger'\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getRegistryIndex,\n resolveTree,\n} from '@/src/utils/registry'\n\nconst addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n})\n\nexport const add = new Command()\n .name('add')\n .description('add a component to your project')\n .argument('[components...]', 'the components to add')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option('-o, --overwrite', 'overwrite existing files.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .option('-a, --all', 'add all available components', false)\n .option('-p, --path <path>', 'the path to add the component to.')\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${chalk.green('init')} to create a components.json file.`,\n )\n process.exit(1)\n }\n\n const registryIndex = await getRegistryIndex()\n\n let selectedComponents = options.all\n ? registryIndex.map(entry => entry.name)\n : options.components\n if (!options.components?.length && !options.all) {\n const { components } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n hint: 'Space to select. A to toggle all. Enter to submit.',\n instructions: false,\n choices: registryIndex.map(entry => ({\n title: entry.name,\n value: entry.name,\n selected: options.all\n ? true\n : options.components?.includes(entry.name),\n })),\n })\n selectedComponents = components\n }\n\n if (!selectedComponents?.length) {\n logger.warn('No components selected. Exiting.')\n process.exit(0)\n }\n\n const tree = await resolveTree(registryIndex, selectedComponents)\n const payload = await fetchTree(config.style, tree)\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n if (!payload.length) {\n logger.warn('Selected components not found. Exiting.')\n process.exit(0)\n }\n\n if (!options.yes) {\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: 'Ready to install components and dependencies. Proceed?',\n initial: true,\n })\n\n if (!proceed)\n process.exit(0)\n }\n\n const spinner = ora('Installing components...').start()\n const skippedDeps = new Set<string>()\n for (const item of payload) {\n spinner.text = `Installing ${item.name}...`\n const targetDir = getItemTargetPath(\n config,\n item,\n options.path ? path.resolve(cwd, options.path) : undefined,\n )\n\n if (!targetDir)\n continue\n\n if (!existsSync(targetDir))\n await fs.mkdir(targetDir, { recursive: true })\n\n const existingComponent = item.files.filter(file =>\n existsSync(path.resolve(targetDir, item.name, file.name)),\n )\n\n if (existingComponent.length && !options.overwrite) {\n if (selectedComponents.includes(item.name)) {\n spinner.stop()\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Component ${item.name} already exists. Would you like to overwrite?`,\n initial: false,\n })\n\n if (!overwrite) {\n logger.info(\n `Skipped ${item.name}. To overwrite, run with the ${chalk.green(\n '--overwrite',\n )} flag.`,\n )\n continue\n }\n\n spinner.start(`Installing ${item.name}...`)\n }\n else {\n continue\n }\n }\n\n for (const file of item.files) {\n const componentDir = path.resolve(targetDir, item.name)\n let filePath = path.resolve(\n targetDir,\n item.name,\n file.name,\n )\n\n if (!config.typescript)\n filePath = filePath.replace(/\\.ts$/, '.js')\n\n if (!existsSync(componentDir))\n await fs.mkdir(componentDir, { recursive: true })\n\n // Run transformers.\n const content = await transform({\n filename: file.name,\n raw: file.content,\n config,\n baseColor,\n })\n\n await fs.writeFile(filePath, content)\n }\n\n // Install dependencies.\n if (item.dependencies?.length) {\n item.dependencies.forEach(dep =>\n skippedDeps.add(dep),\n )\n\n const packageManager = await getPackageManager(cwd)\n await execa(\n packageManager,\n [\n packageManager === 'npm' ? 'install' : 'add',\n ...item.dependencies,\n ],\n {\n cwd,\n },\n )\n }\n }\n spinner.succeed('Done.')\n }\n catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { Project, ScriptKind, type SourceFile } from 'ts-morph'\nimport type * as z from 'zod'\nimport type { Config } from '@/src/utils/get-config'\nimport type { registryBaseColorSchema } from '@/src/utils/registry/schema'\nimport { transformCssVars } from '@/src/utils/transformers/transform-css-vars'\nimport { transformImport } from '@/src/utils/transformers/transform-import'\nimport { transformSFC } from '@/src/utils/transformers/transform-sfc'\n\nexport interface TransformOpts {\n filename: string\n raw: string\n config: Config\n baseColor?: z.infer<typeof registryBaseColorSchema>\n}\n\nexport type Transformer<Output = SourceFile> = (\n opts: TransformOpts & {\n sourceFile: SourceFile\n }\n) => Promise<Output>\n\nconst transformers: Transformer[] = [\n transformCssVars,\n transformImport,\n]\n\nconst project = new Project({\n compilerOptions: {},\n})\n\nasync function createTempSourceFile(filename: string) {\n const dir = await fs.mkdtemp(path.join(tmpdir(), 'shadcn-'))\n return path.join(dir, filename)\n}\n\nexport async function transform(opts: TransformOpts) {\n const tempFile = await createTempSourceFile(opts.filename)\n const sourceFile = project.createSourceFile(tempFile, opts.raw, {\n scriptKind: ScriptKind.Unknown,\n })\n\n for (const transformer of transformers)\n transformer({ sourceFile, ...opts })\n\n return await transformSFC({\n sourceFile,\n ...opts,\n })\n}\n","import { SyntaxKind } from 'ts-morph'\nimport type * as z from 'zod'\nimport type { registryBaseColorSchema } from '@/src/utils/registry/schema'\nimport type { Transformer } from '@/src/utils/transformers'\n\nexport const transformCssVars: Transformer = async ({\n sourceFile,\n config,\n baseColor,\n}) => {\n // No transform if using css variables.\n if (config.tailwind?.cssVariables || !baseColor?.inlineColors)\n return sourceFile\n\n sourceFile.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach((node) => {\n const value = node.getText()\n\n if (value.includes('cn(')) {\n const splitted = value.split('\\'').map(i => applyColorMapping(i, baseColor.inlineColors))\n node.replaceWithText(`${splitted.join('\\'')}`)\n }\n else if (value) {\n const valueWithColorMapping = applyColorMapping(\n value.replace(/\"/g, ''),\n baseColor.inlineColors,\n )\n node.replaceWithText(`\"${valueWithColorMapping.trim()}\"`)\n }\n })\n\n return sourceFile\n}\n\n// Splits a className into variant-name-alpha.\n// eg. hover:bg-primary-100 -> [hover, bg-primary, 100]\nexport function splitClassName(className: string): (string | null)[] {\n if (!className.includes('/') && !className.includes(':'))\n return [null, className, null]\n\n const parts: (string | null)[] = []\n // First we split to find the alpha.\n const [rest, alpha] = className.split('/')\n\n // Check if rest has a colon.\n if (!rest.includes(':'))\n return [null, rest, alpha]\n\n // Next we split the rest by the colon.\n const split = rest.split(':')\n\n // We take the last item from the split as the name.\n const name = split.pop()\n\n // We glue back the rest of the split.\n const variant = split.join(':')\n\n // Finally we push the variant, name and alpha.\n parts.push(variant ?? null, name ?? null, alpha ?? null)\n\n return parts\n}\n\nconst PREFIXES = ['bg-', 'text-', 'border-', 'ring-offset-', 'ring-']\n\nexport function applyColorMapping(\n input: string,\n mapping: z.infer<typeof registryBaseColorSchema>['inlineColors'],\n) {\n // Handle border classes.\n if (input.includes(' border '))\n input = input.replace(' border ', ' border border-border ')\n\n // Build color mappings.\n const classNames = input.split(' ')\n const lightMode: string[] = []\n const darkMode: string[] = []\n for (const className of classNames) {\n const [variant, value, modifier] = splitClassName(className)\n const prefix = PREFIXES.find(prefix => value?.startsWith(prefix))\n if (!prefix) {\n if (!lightMode.includes(className))\n lightMode.push(className)\n\n continue\n }\n\n const needle = value?.replace(prefix, '')\n if (needle && needle in mapping.light) {\n lightMode.push(\n [variant, `${prefix}${mapping.light[needle]}`]\n .filter(Boolean)\n .join(':') + (modifier ? `/${modifier}` : ''),\n )\n\n darkMode.push(\n ['dark', variant, `${prefix}${mapping.dark[needle]}`]\n .filter(Boolean)\n .join(':') + (modifier ? `/${modifier}` : ''),\n )\n continue\n }\n\n if (!lightMode.includes(className))\n lightMode.push(className)\n }\n\n return `${lightMode.join(' ')} ${darkMode.join(' ').trim()}`\n}\n","import type { Transformer } from '@/src/utils/transformers'\n\nexport const transformImport: Transformer = async ({ sourceFile, config }) => {\n const importDeclarations = sourceFile.getImportDeclarations()\n\n for (const importDeclaration of importDeclarations) {\n const moduleSpecifier = importDeclaration.getModuleSpecifierValue()\n\n // Replace @/lib/registry/[style] with the components alias.\n if (moduleSpecifier.startsWith('@/lib/registry/')) {\n importDeclaration.setModuleSpecifier(\n moduleSpecifier.replace(\n /^@\\/lib\\/registry\\/[^/]+/,\n config.aliases.components,\n ),\n )\n }\n\n // Replace `import { cn } from \"@/lib/utils\"`\n if (moduleSpecifier === '@/lib/utils') {\n const namedImports = importDeclaration.getNamedImports()\n const cnImport = namedImports.find(i => i.getName() === 'cn')\n if (cnImport) {\n importDeclaration.setModuleSpecifier(\n moduleSpecifier.replace(/^@\\/lib\\/utils/, config.aliases.utils),\n )\n }\n }\n }\n\n return sourceFile\n}\n","import { createRequire } from 'node:module'\nimport type { Transformer } from '@/src/utils/transformers'\n\n// required cause Error: Dynamic require of \"@babel/core\" is not supported\nconst require = createRequire(import.meta.url)\nconst { transform } = require('detype')\n\nexport async function transformByDetype(content: string, filename: string) {\n return await transform(content, filename, {\n removeTsComments: true,\n })\n}\n\nexport const transformSFC: Transformer<string> = async ({ sourceFile, config }) => {\n const output = sourceFile?.getFullText()\n if (config?.typescript)\n return output\n\n return await transformByDetype(output, 'app.vue')\n}\n","import path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { cosmiconfig } from 'cosmiconfig'\nimport type { ConfigLoaderResult } from 'tsconfig-paths'\nimport { loadConfig } from 'tsconfig-paths'\nimport * as z from 'zod'\nimport { resolveImport } from '@/src/utils/resolve-import'\n\nexport const DEFAULT_STYLE = 'default'\nexport const DEFAULT_COMPONENTS = '@/components'\nexport const DEFAULT_UTILS = '@/lib/utils'\nexport const DEFAULT_TAILWIND_CONFIG = 'tailwind.config.js'\nexport const DEFAULT_TAILWIND_BASE_COLOR = 'slate'\n\nexport const TAILWIND_CSS_PATH = {\n nuxt: 'assets/css/tailwind.css',\n vite: 'src/assets/index.css',\n laravel: 'resources/css/app.css',\n}\n\n// TODO: Figure out if we want to support all cosmiconfig formats.\n// A simple components.json file would be nice.\nconst explorer = cosmiconfig('components', {\n searchPlaces: ['components.json'],\n})\n\nexport const rawConfigSchema = z\n .object({\n $schema: z.string().optional(),\n style: z.string(),\n typescript: z.boolean().default(true),\n tailwind: z.object({\n config: z.string(),\n css: z.string(),\n baseColor: z.string(),\n cssVariables: z.boolean().default(true),\n }),\n framework: z.string().default('Vite'),\n aliases: z.object({\n components: z.string(),\n utils: z.string(),\n }),\n })\n .strict()\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>\n\nexport const configSchema = rawConfigSchema\n .extend({\n resolvedPaths: z.object({\n tailwindConfig: z.string(),\n tailwindCss: z.string(),\n utils: z.string(),\n components: z.string(),\n }),\n })\n\nexport type Config = z.infer<typeof configSchema>\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd)\n\n if (!config)\n return null\n\n return await resolveConfigPaths(cwd, config)\n}\n\nexport async function resolveConfigPaths(cwd: string, config: RawConfig) {\n let tsConfig: ConfigLoaderResult | undefined\n let tsConfigPath = path.resolve(\n cwd,\n config.framework === 'nuxt' ? '.nuxt/tsconfig.json' : './tsconfig.json',\n )\n\n if (config.typescript) {\n // Read tsconfig.json.\n tsConfig = loadConfig(tsConfigPath)\n // In new Vue project, tsconfig has references to tsconfig.app.json, which is causing the path not resolving correctly\n // If no paths were found, try to load tsconfig.app.json.\n if ('paths' in tsConfig && Object.keys(tsConfig.paths).length === 0) {\n tsConfigPath = path.resolve(cwd, './tsconfig.app.json')\n if (existsSync(tsConfigPath))\n tsConfig = loadConfig(tsConfigPath)\n }\n }\n else {\n tsConfigPath = path.resolve(cwd, './jsconfig.json')\n tsConfig = loadConfig(tsConfigPath)\n }\n\n if (tsConfig.resultType === 'failed') {\n throw new Error(\n `Failed to load ${tsConfigPath}. ${tsConfig.message ?? ''}`.trim(),\n )\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n tailwindConfig: path.resolve(cwd, config.tailwind.config),\n tailwindCss: path.resolve(cwd, config.tailwind.css),\n utils: resolveImport(config.aliases.utils, tsConfig),\n components: resolveImport(config.aliases.components, tsConfig),\n },\n })\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd)\n\n if (!configResult)\n return null\n\n return rawConfigSchema.parse(configResult.config)\n }\n catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`)\n }\n}\n","import { type ConfigLoaderSuccessResult, createMatchPath } from 'tsconfig-paths'\n\nexport function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, 'absoluteBaseUrl' | 'paths'>,\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n ['.ts', '.tsx', '.vue'],\n )\n}\n","import { detect } from '@antfu/ni'\n\nexport async function getPackageManager(\n targetDir: string,\n): Promise<'yarn' | 'pnpm' | 'bun' | 'npm'> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === 'yarn@berry')\n return 'yarn'\n if (packageManager === 'pnpm@6')\n return 'pnpm'\n if (packageManager === 'bun')\n return 'bun'\n\n return packageManager ?? 'npm'\n}\n","import chalk from 'chalk'\n\nexport const logger = {\n error(...args: unknown[]) {\n console.log(chalk.red(...args))\n },\n warn(...args: unknown[]) {\n console.log(chalk.yellow(...args))\n },\n info(...args: unknown[]) {\n console.log(chalk.cyan(...args))\n },\n success(...args: unknown[]) {\n console.log(chalk.green(...args))\n },\n break() {\n console.log('')\n },\n}\n","import { logger } from './logger'\n\nexport function handleError(error: unknown) {\n if (typeof error === 'string') {\n logger.error(error)\n process.exit(1)\n }\n\n if (error instanceof Error) {\n logger.error(error.message)\n process.exit(1)\n }\n\n logger.error('Something went wrong. Please try again.')\n process.exit(1)\n}\n","import path from 'node:path'\nimport process from 'node:process'\nimport { HttpsProxyAgent } from 'https-proxy-agent'\nimport fetch from 'node-fetch'\nimport type * as z from 'zod'\nimport {\n registryBaseColorSchema,\n registryIndexSchema,\n registryWithContentSchema,\n stylesSchema,\n} from '@/src/utils/registry/schema'\nimport type { registryItemWithContentSchema } from '@/src/utils/registry/schema'\nimport type { Config } from '@/src/utils/get-config'\n\nconst baseUrl = process.env.COMPONENTS_REGISTRY_URL ?? 'https://www.shadcn-vue.com'\nconst agent = process.env.https_proxy\n ? new HttpsProxyAgent(process.env.https_proxy)\n : undefined\n\nexport async function getRegistryIndex() {\n try {\n const [result] = await fetchRegistry(['index.json'])\n\n return registryIndexSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch components from registry.')\n }\n}\n\nexport async function getRegistryStyles() {\n try {\n const [result] = await fetchRegistry(['styles/index.json'])\n\n return stylesSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch styles from registry.')\n }\n}\n\nexport function getRegistryBaseColors() {\n return [\n {\n name: 'slate',\n label: 'Slate',\n },\n {\n name: 'gray',\n label: 'Gray',\n },\n {\n name: 'zinc',\n label: 'Zinc',\n },\n {\n name: 'neutral',\n label: 'Neutral',\n },\n {\n name: 'stone',\n label: 'Stone',\n },\n ]\n}\n\nexport async function getRegistryBaseColor(baseColor: string) {\n try {\n const [result] = await fetchRegistry([`colors/${baseColor}.json`])\n\n return registryBaseColorSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch base color from registry.')\n }\n}\n\nexport async function resolveTree(\n index: z.infer<typeof registryIndexSchema>,\n names: string[],\n) {\n const tree: z.infer<typeof registryIndexSchema> = []\n\n for (const name of names) {\n const entry = index.find(entry => entry.name === name)\n\n if (!entry)\n continue\n\n tree.push(entry)\n\n if (entry.registryDependencies) {\n const dependencies = await resolveTree(index, entry.registryDependencies)\n tree.push(...dependencies)\n }\n }\n\n return tree.filter(\n (component, index, self) =>\n self.findIndex(c => c.name === component.name) === index,\n )\n}\n\nexport async function fetchTree(\n style: string,\n tree: z.infer<typeof registryIndexSchema>,\n) {\n try {\n const paths = tree.map(item => `styles/${style}/${item.name}.json`)\n const result = await fetchRegistry(paths)\n\n return registryWithContentSchema.parse(result)\n }\n catch (error) {\n throw new Error('Failed to fetch tree from registry.')\n }\n}\n\nexport function getItemTargetPath(\n config: Config,\n item: Pick<z.infer<typeof registryItemWithContentSchema>, 'type'>,\n override?: string,\n) {\n // Allow overrides for all items but ui.\n if (override && item.type !== 'components:ui')\n return override\n\n const [parent, type] = item.type.split(':')\n if (!(parent in config.resolvedPaths))\n return null\n\n return path.join(\n config.resolvedPaths[parent as keyof typeof config.resolvedPaths],\n type,\n )\n}\n\nasync function fetchRegistry(paths: string[]) {\n try {\n const results = await Promise.all(\n paths.map(async (path) => {\n const response = await fetch(`${baseUrl}/registry/${path}`, {\n agent,\n })\n return await response.json()\n }),\n )\n return results\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.log(error)\n throw new Error(`Failed to fetch registry from ${baseUrl}.`)\n }\n}\n","import * as z from 'zod'\n\n// TODO: Extract this to a shared package.\nexport const registryItemSchema = z.object({\n name: z.string(),\n dependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(z.string()),\n type: z.enum(['components:ui', 'components:component', 'components:example']),\n})\n\nexport const registryIndexSchema = z.array(registryItemSchema)\n\nexport const registryItemWithContentSchema = registryItemSchema.extend({\n files: z.array(\n z.object({\n name: z.string(),\n content: z.string(),\n }),\n ),\n})\n\nexport const registryWithContentSchema = z.array(registryItemWithContentSchema)\n\nexport const stylesSchema = z.array(\n z.object({\n name: z.string(),\n label: z.string(),\n }),\n)\n\nexport const registryBaseColorSchema = z.object({\n inlineColors: z.object({\n light: z.record(z.string(), z.string()),\n dark: z.record(z.string(), z.string()),\n }),\n cssVars: z.object({\n light: z.record(z.string(), z.string()),\n dark: z.record(z.string(), z.string()),\n }),\n inlineColorsTemplate: z.string(),\n cssVarsTemplate: z.string(),\n})\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { type Change, diffLines } from 'diff'\nimport * as z from 'zod'\nimport type { Config } from '@/src/utils/get-config'\nimport { getConfig } from '@/src/utils/get-config'\nimport { handleError } from '@/src/utils/handle-error'\nimport { logger } from '@/src/utils/logger'\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getRegistryIndex,\n} from '@/src/utils/registry'\nimport type { registryIndexSchema } from '@/src/utils/registry/schema'\nimport { transform } from '@/src/utils/transformers'\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name('diff')\n .description('check for updates against the registry')\n .argument('[component]', 'the component name')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${chalk.green(\n 'init',\n )} to create a components.json file.`,\n )\n process.exit(1)\n }\n\n const registryIndex = await getRegistryIndex()\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files) {\n const filePath = path.resolve(targetDir, file)\n if (existsSync(filePath))\n return true\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info('No updates found.')\n process.exit(0)\n }\n\n logger.info('The following components have updates available:')\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes)\n logger.info(` - ${change.filePath}`)\n }\n logger.break()\n logger.info(\n `Run ${chalk.green('diff <component>')} to see the changes.`,\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n item => item.name === options.component,\n )\n\n if (!component) {\n logger.error(\n `The component ${chalk.green(options.component)} does not exist.`,\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n printDiff(change.patch)\n logger.info('')\n }\n }\n catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config,\n) {\n const payload = await fetchTree(config.style, [component])\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir)\n continue\n\n for (const file of item.files) {\n const filePath = path.resolve(targetDir, file.name)\n\n if (!existsSync(filePath))\n continue\n\n const fileContent = await fs.readFile(filePath, 'utf8')\n\n const registryContent = await transform({\n filename: file.name,\n raw: file.content,\n config,\n baseColor,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n file: file.name,\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\n// TODO: Does is it need to async?\nfunction printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added)\n return process.stdout.write(chalk.green(part.value))\n\n if (part.removed)\n return process.stdout.write(chalk.red(part.value))\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { existsSync, promises as fs } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { execa } from 'execa'\nimport template from 'lodash.template'\nimport ora from 'ora'\nimport prompts from 'prompts'\nimport * as z from 'zod'\nimport * as templates from '../utils/templates'\nimport {\n getRegistryBaseColor,\n getRegistryBaseColors,\n getRegistryStyles,\n} from '../utils/registry'\nimport { logger } from '../utils/logger'\nimport { handleError } from '../utils/handle-error'\nimport { getPackageManager } from '../utils/get-package-manager'\nimport { transformByDetype } from '../utils/transformers/transform-sfc'\nimport {\n type Config,\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_UTILS,\n TAILWIND_CSS_PATH,\n getConfig,\n rawConfigSchema,\n resolveConfigPaths,\n} from '../utils/get-config'\n\nconst PROJECT_DEPENDENCIES = {\n base: [\n 'tailwindcss-animate',\n 'class-variance-authority',\n 'clsx',\n 'tailwind-merge',\n ],\n nuxt: [\n '@nuxtjs/tailwindcss',\n ],\n}\n\nconst initOptionsSchema = z.object({\n cwd: z.string(),\n yes: z.boolean(),\n})\n\nexport const init = new Command()\n .name('init')\n .description('initialize your project and install dependencies')\n .option('-y, --yes', 'skip confirmation prompt.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd(),\n )\n .action(async (opts) => {\n try {\n const options = initOptionsSchema.parse(opts)\n const cwd = path.resolve(options.cwd)\n\n // Ensure target directory exists.\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n // Read config.\n const existingConfig = await getConfig(cwd)\n const config = await promptForConfig(cwd, existingConfig, options.yes)\n\n await runInit(cwd, config)\n\n logger.info('')\n logger.info(\n `${chalk.green('Success!')} Project initialization completed.`,\n )\n logger.info('')\n }\n catch (error) {\n handleError(error)\n }\n })\n\nexport async function promptForConfig(\n cwd: string,\n defaultConfig: Config | null = null,\n skip = false,\n) {\n const highlight = (text: string) => chalk.cyan(text)\n\n const styles = await getRegistryStyles()\n const baseColors = await getRegistryBaseColors()\n\n const options = await prompts([\n {\n type: 'toggle',\n name: 'typescript',\n message: `Would you like to use ${highlight('TypeScript')} (recommended)?`,\n initial: defaultConfig?.typescript ?? true,\n active: 'yes',\n inactive: 'no',\n },\n {\n type: 'select',\n name: 'framework',\n message: `Which ${highlight('framework')} are you using?`,\n choices: [\n { title: 'Vite', value: 'vite' },\n { title: 'Nuxt', value: 'nuxt' },\n { title: 'Laravel', value: 'laravel' },\n ],\n },\n {\n type: 'select',\n name: 'style',\n message: `Which ${highlight('style')} would you like to use?`,\n choices: styles.map(style => ({\n title: style.label,\n value: style.name,\n })),\n },\n {\n type: 'select',\n name: 'tailwindBaseColor',\n message: `Which color would you like to use as ${highlight(\n 'base color',\n )}?`,\n choices: baseColors.map(color => ({\n title: color.label,\n value: color.name,\n })),\n },\n {\n type: 'text',\n name: 'tailwindCss',\n message: `Where is your ${highlight('Tailwind CSS')} file?`,\n initial: (prev, values) => defaultConfig?.tailwind.css ?? TAILWIND_CSS_PATH[values.framework as 'vite' | 'nuxt' | 'laravel'],\n },\n {\n type: 'toggle',\n name: 'tailwindCssVariables',\n message: `Would you like to use ${highlight(\n 'CSS variables',\n )} for colors?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: 'yes',\n inactive: 'no',\n },\n {\n type: 'text',\n name: 'tailwindConfig',\n message: `Where is your ${highlight('tailwind.config.js')} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: 'text',\n name: 'components',\n message: `Configure the import alias for ${highlight('components')}:`,\n initial: defaultConfig?.aliases.components ?? DEFAULT_COMPONENTS,\n },\n {\n type: 'text',\n name: 'utils',\n message: `Configure the import alias for ${highlight('utils')}:`,\n initial: defaultConfig?.aliases.utils ?? DEFAULT_UTILS,\n },\n ])\n\n const config = rawConfigSchema.parse({\n // $schema: 'https://ui.shadcn.com/schema.json',\n style: options.style,\n typescript: options.typescript,\n framework: options.framework,\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: options.tailwindBaseColor,\n cssVariables: options.tailwindCssVariables,\n },\n aliases: {\n utils: options.utils,\n components: options.components,\n },\n })\n\n if (!skip) {\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: `Write configuration to ${highlight('components.json')}. Proceed?`,\n initial: true,\n })\n\n if (!proceed)\n process.exit(0)\n }\n\n // Write to file.\n logger.info('')\n const spinner = ora('Writing components.json...').start()\n const targetPath = path.resolve(cwd, 'components.json')\n await fs.writeFile(targetPath, JSON.stringify(config, null, 2), 'utf8')\n spinner.succeed()\n\n return await resolveConfigPaths(cwd, config)\n}\n\nexport async function runInit(cwd: string, config: Config) {\n const spinner = ora('Initializing project...')?.start()\n\n // Ensure all resolved paths directories exist.\n for (const [key, resolvedPath] of Object.entries(config.resolvedPaths)) {\n // Determine if the path is a file or directory.\n // TODO: is there a better way to do this?\n let dirname = path.extname(resolvedPath)\n ? path.dirname(resolvedPath)\n : resolvedPath\n\n // If the utils alias is set to something like \"@/lib/utils\",\n // assume this is a file and remove the \"utils\" file name.\n // TODO: In future releases we should add support for individual utils.\n if (key === 'utils' && resolvedPath.endsWith('/utils')) {\n // Remove /utils at the end.\n dirname = dirname.replace(/\\/utils$/, '')\n }\n\n if (!existsSync(dirname))\n await fs.mkdir(dirname, { recursive: true })\n }\n\n const extension = config.typescript ? 'ts' : 'js'\n\n // Write tailwind config.\n await fs.writeFile(\n config.resolvedPaths.tailwindConfig,\n config.tailwind.cssVariables\n ? template(templates.TAILWIND_CONFIG_WITH_VARIABLES)({ extension, framework: config.framework })\n : template(templates.TAILWIND_CONFIG)({ extension, framework: config.framework }),\n 'utf8',\n )\n\n // Write css file.\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n if (baseColor) {\n await fs.writeFile(\n config.resolvedPaths.tailwindCss,\n config.tailwind.cssVariables\n ? baseColor.cssVarsTemplate\n : baseColor.inlineColorsTemplate,\n 'utf8',\n )\n }\n\n // Write cn file.\n await fs.writeFile(\n `${config.resolvedPaths.utils}.${extension}`,\n extension === 'ts' ? templates.UTILS : await transformByDetype(templates.UTILS, '.ts'),\n 'utf8',\n )\n\n spinner?.succeed()\n\n // Install dependencies.\n const dependenciesSpinner = ora('Installing dependencies...')?.start()\n const packageManager = await getPackageManager(cwd)\n\n const deps = PROJECT_DEPENDENCIES.base.concat(\n config.framework === 'nuxt' ? PROJECT_DEPENDENCIES.nuxt : [],\n ).concat(\n config.style === 'new-york' ? ['@radix-icons/vue'] : ['lucide-vue-next'],\n ).filter(Boolean)\n\n await execa(\n packageManager,\n [packageManager === 'npm' ? 'install' : 'add', ...deps],\n {\n cwd,\n },\n )\n dependenciesSpinner?.succeed()\n}\n","export const UTILS = `import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { camelize, getCurrentInstance, toHandlerKey } from 'vue'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n`\n\nexport const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n darkMode: [\"class\"],\n content: [\n './pages/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './components/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './app/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './src/**/*.{<%- extension %>,<%- extension %>x,vue}',\n\t],\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n keyframes: {\n \"accordion-down\": {\n from: { height: 0 },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: 0 },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n}`\n\nexport const TAILWIND_CONFIG_WITH_VARIABLES = `/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n darkMode: [\"class\"],\n <% if (framework === 'vite') { %>\n content: [\n './pages/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './components/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './app/**/*.{<%- extension %>,<%- extension %>x,vue}',\n './src/**/*.{<%- extension %>,<%- extension %>x,vue}',\n\t],\n <% } else if (framework === 'laravel') { %>\n content: [\n \"./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php\",\n \"./storage/framework/views/*.php\",\n \"./resources/views/**/*.blade.php\",\n \"./resources/js/**/*.{<%- extension %>,<%- extension %>x,vue}\",\n ],\n <% } %>\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: 0 },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: 0 },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n}`\n","import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport fs from 'fs-extra'\nimport { type PackageJson } from 'type-fest'\n\nexport function getPackageInfo() {\n const packageJsonPath = getPackageFilePath('../package.json')\n\n return fs.readJSONSync(packageJsonPath) as PackageJson\n}\n\nfunction getPackageFilePath(filePath: string) {\n const distPath = fileURLToPath(new URL('.', import.meta.url))\n\n return path.resolve(distPath, filePath)\n}\n"],"mappings":"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","names":["process","Command","existsSync","fs","path","process","chalk","z","prefix","require","transform","path","path","path","process","z","process","entry","index","path","process","path","existsSync","chalk","components","fs","transform","existsSync","fs","path","process","chalk","Command","z","Command","process","path","existsSync","chalk","component","changes","fs","transform","diff","existsSync","fs","path","process","chalk","Command","execa","ora","prompts","z","Command","process","path","existsSync","chalk","prompts","ora","fs","execa","path","fs","process","Command"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shadcn-vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"description": "Add components to your apps.",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"node-fetch": "^3.3.2",
|
|
47
47
|
"ora": "^7.0.1",
|
|
48
48
|
"prompts": "^2.4.2",
|
|
49
|
-
"radix-vue": "^0.
|
|
49
|
+
"radix-vue": "^0.4.1",
|
|
50
50
|
"recast": "^0.23.4",
|
|
51
51
|
"rimraf": "^5.0.1",
|
|
52
52
|
"ts-morph": "^19.0.0",
|