{"version":3,"file":"create.cjs","sources":["../../../src/cli/commands/create.ts"],"sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\nimport readline from \"readline\";\nimport { getConfig } from \"../utils/get-config\";\nimport { setupInit } from \"./setup-init\";\n\nexport async function create(componentName?: string) {\n  try {\n    const config = await getConfig();\n    await setupInit(config);\n\n    let finalComponentName = componentName;\n\n    // If no component name was provided, prompt the user\n    if (!finalComponentName) {\n      const rl = readline.createInterface({\n        input: process.stdin,\n        output: process.stdout,\n      });\n\n      finalComponentName = await new Promise<string>((resolve) => {\n        rl.question('Enter component name (e.g., \"my-component\"): ', (answer) => {\n          resolve(answer.trim());\n        });\n      });\n\n      rl.close();\n    }\n\n    if (!finalComponentName) {\n      console.error(\"Component name is required\");\n      process.exit(1);\n    }\n\n    // Format component name to ensure it starts with uppercase and remove special characters\n    const formattedName = finalComponentName\n      .split(/[^a-zA-Z0-9]/) // Split on any non-alphanumeric characters\n      .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) // Capitalize each word\n      .join(\"\"); // Join back together\n\n    // Create camelCase version for theme usage\n    const camelCaseName = formattedName.charAt(0).toLowerCase() + formattedName.slice(1);\n\n    if (!formattedName) {\n      console.error(\"Component name must contain at least one letter or number\");\n      process.exit(1);\n    }\n\n    // Determine file extension based on tsx config\n    const fileExtension = config.tsx ? \".tsx\" : \".jsx\";\n    const componentFilePath = path.join(config.path, `${finalComponentName}${fileExtension}`);\n\n    // Ensure the components directory exists\n    try {\n      await fs.access(config.path);\n    } catch {\n      console.log(`Creating components directory at ${config.path}...`);\n      await fs.mkdir(config.path, { recursive: true });\n    }\n\n    // Check if file already exists\n    try {\n      await fs.access(componentFilePath);\n      console.error(`Component file already exists at ${componentFilePath}`);\n      process.exit(1);\n    } catch {\n      // File doesn't exist, we can proceed\n    }\n\n    // Create component content with or without \"use client\" directive based on config\n    const useClientDirective = config.rsc ? `\"use client\";\\n\\n` : \"\";\n\n    // Create different content based on whether we're using TypeScript or JavaScript\n    let componentContent;\n\n    if (config.tsx) {\n      // TypeScript version\n      componentContent = `${useClientDirective}import { createTheme } from \"flowbite-react/helpers/create-theme\";\nimport { get } from \"flowbite-react/helpers/get\";\nimport { resolveProps } from \"flowbite-react/helpers/resolve-props\";\nimport { useResolveTheme } from \"flowbite-react/helpers/resolve-theme\";\nimport { twMerge } from \"flowbite-react/helpers/tailwind-merge\";\nimport { useThemeProvider } from \"flowbite-react/theme/provider\";\nimport type { ThemingProps } from \"flowbite-react/types\";\nimport { forwardRef, type ComponentProps } from \"react\";\n\ndeclare module \"flowbite-react/types\" {\n  interface FlowbiteTheme {\n    ${camelCaseName}: ${formattedName}Theme;\n  }\n\n  interface FlowbiteProps {\n    ${camelCaseName}: Partial<WithoutThemingProps<${formattedName}Props>>;\n  }\n}\n\nexport interface ${formattedName}Theme {\n  base: string;\n  // ...\n}\n\nexport const ${camelCaseName}Theme = createTheme<${formattedName}Theme>({\n  base: \"\",\n  // ...\n});\n\nexport interface ${formattedName}Props extends ComponentProps<\"div\">, ThemingProps<${formattedName}Theme> {\n  // ...\n}\n\nexport const ${formattedName} = forwardRef<HTMLDivElement, ${formattedName}Props>((props, ref) => {\n  const provider = useThemeProvider();\n\n  const theme = useResolveTheme(\n    [${camelCaseName}Theme, provider.theme?.${camelCaseName}, props.theme],\n    [get(provider.clearTheme, \"${camelCaseName}\"), props.clearTheme],\n    [get(provider.applyTheme, \"${camelCaseName}\"), props.applyTheme],\n  );\n\n  const { children, className, ...restProps } = resolveProps(props, provider.props?.${camelCaseName});\n\n  return (\n    <div ref={ref} className={twMerge(theme.base, className)} {...restProps}>\n      {children}\n    </div>\n  );\n});\n\n${formattedName}.displayName = \"${formattedName}\";`;\n    } else {\n      // JavaScript version (without TypeScript syntax)\n      componentContent = `${useClientDirective}import { createTheme } from \"flowbite-react/helpers/create-theme\";\nimport { get } from \"flowbite-react/helpers/get\";\nimport { resolveProps } from \"flowbite-react/helpers/resolve-props\";\nimport { useResolveTheme } from \"flowbite-react/helpers/resolve-theme\";\nimport { twMerge } from \"flowbite-react/helpers/tailwind-merge\";\nimport { useThemeProvider } from \"flowbite-react/theme/provider\";\nimport { forwardRef } from \"react\";\n\nexport const ${camelCaseName}Theme = createTheme({\n  base: \"\",\n  // ...\n});\n\nexport const ${formattedName} = forwardRef((props, ref) => {\n  const provider = useThemeProvider();\n\n  const theme = useResolveTheme(\n    [${camelCaseName}Theme, provider.theme?.${camelCaseName}, props.theme],\n    [get(provider.clearTheme, \"${camelCaseName}\"), props.clearTheme],\n    [get(provider.applyTheme, \"${camelCaseName}\"), props.applyTheme],\n  );\n\n  const { children, className, ...restProps } = resolveProps(props, provider.props?.${camelCaseName});\n\n  return (\n    <div ref={ref} className={twMerge(theme.base, className)} {...restProps}>\n      {children}\n    </div>\n  );\n});\n\n${formattedName}.displayName = \"${formattedName}\";`;\n    }\n\n    // Write the component file\n    console.log(`Creating component file at ${componentFilePath}...`);\n    await fs.writeFile(componentFilePath, componentContent);\n\n    console.log(`\\n✅ Component ${formattedName} created successfully!`);\n  } catch (error) {\n    console.error(\"Failed to create component:\", error);\n  }\n}\n"],"names":["getConfig","setupInit"],"mappings":"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"}