{"version":3,"file":"setup-tailwind.cjs","sources":["../../../src/cli/commands/setup-tailwind.ts"],"sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\nimport { classListFilePath, excludeDirs, pluginName, pluginPath } from \"../consts\";\nimport { addImport } from \"../utils/add-import\";\nimport { addToConfig } from \"../utils/add-to-config\";\nimport { findFiles } from \"../utils/find-files\";\nimport { joinNormalizedPath } from \"../utils/normalize-path\";\n\n/**\n * Sets up Tailwind CSS configuration for the project.\n *\n * This function checks if Tailwind CSS is installed in the project and then\n * attempts to add the necessary configuration for Tailwind CSS v4 or v3.\n */\nexport async function setupTailwind() {\n  try {\n    const found = !!((await setupTailwindV4()) || (await setupTailwindV3()));\n\n    if (!found) {\n      console.warn(\"Missing Tailwind CSS configuration file.\");\n    }\n  } catch (error) {\n    console.error(\"Failed to setup Tailwind:\", error);\n  }\n}\n\n/**\n * Sets up Tailwind CSS v4 configuration for the project.\n *\n * This function searches for Tailwind CSS files in the project and attempts to\n * add the necessary configuration for Tailwind CSS v4.\n */\nasync function setupTailwindV4() {\n  try {\n    const cssFiles = await findFiles({\n      patterns: [\"**/*.css\", \"**/*.less\", \"**/*.sass\", \"**/*.scss\"],\n      excludeDirs,\n    });\n\n    let found = false;\n\n    for (const file of cssFiles) {\n      const content = await fs.readFile(file, \"utf-8\");\n      const lines = content.split(\"\\n\");\n\n      let tailwindImportIndex = -1;\n      let quoteType = '\"';\n\n      for (let i = 0; i < lines.length; i++) {\n        const line = lines[i];\n        const singleQuoteMatch = line.match(/@import\\s+'tailwindcss'/);\n        const doubleQuoteMatch = line.match(/@import\\s+\"tailwindcss\"/);\n\n        if (singleQuoteMatch || doubleQuoteMatch) {\n          tailwindImportIndex = i;\n          quoteType = singleQuoteMatch ? \"'\" : '\"';\n\n          if (!line.trim().endsWith(\";\")) {\n            lines[i] = line + \";\";\n          }\n\n          break;\n        }\n      }\n\n      if (tailwindImportIndex === -1) {\n        continue;\n      }\n\n      found = true;\n\n      const pluginDirectivePath = joinNormalizedPath(pluginPath, \"tailwindcss\");\n      const sourceDirectivePath = path\n        .join(path.relative(path.dirname(file), process.cwd()), classListFilePath)\n        .replace(/\\\\/g, \"/\");\n\n      const pluginRegex_OLD = new RegExp(\n        `@plugin\\\\s+['\"](${pluginDirectivePath.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})['\"](;|\\\\s|$)`,\n      );\n      const pluginRegex = new RegExp(\n        `@import\\\\s+['\"](${pluginDirectivePath.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})['\"](;|\\\\s|$)`,\n      );\n      const sourceRegex = new RegExp(\n        `@source\\\\s+['\"](${sourceDirectivePath.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})['\"](;|\\\\s|$)`,\n      );\n\n      const hasPluginDirective_OLD = pluginRegex_OLD.test(content);\n      const hasPluginDirective = pluginRegex.test(content);\n      const hasSourceDirective = sourceRegex.test(content);\n\n      if (hasPluginDirective && hasSourceDirective) {\n        continue;\n      }\n\n      if (hasPluginDirective_OLD) {\n        const pluginImportIndex = lines.findIndex((line) => pluginRegex_OLD.test(line));\n        if (pluginImportIndex !== -1) {\n          console.log(`Removing old flowbite-react plugin import directive from ${file}...`);\n          lines.splice(pluginImportIndex, 1);\n        }\n      }\n\n      const directivesToAdd = [];\n      if (!hasPluginDirective) {\n        const pluginDirective = `@import ${quoteType}${pluginDirectivePath}${quoteType};`;\n        directivesToAdd.push(pluginDirective);\n      }\n      if (!hasSourceDirective) {\n        const sourceDirective = `@source ${quoteType}${sourceDirectivePath}${quoteType};`;\n        directivesToAdd.push(sourceDirective);\n      }\n\n      lines.splice(tailwindImportIndex + 1, 0, ...directivesToAdd);\n\n      const updatedContent = lines.join(\"\\n\");\n\n      console.log(`Updating ${file} with flowbite-react configuration...`);\n      await fs.writeFile(file, updatedContent, \"utf-8\");\n    }\n\n    return found;\n  } catch (error) {\n    console.error(\"Failed to setup Tailwind CSS v4:\", error);\n  }\n}\n\nasync function setupTailwindV3() {\n  try {\n    const configFiles = await findFiles({\n      patterns: [\n        \"tailwind.config.cjs\",\n        \"tailwind.config.js\",\n        \"tailwind.config.mjs\",\n        \"tailwind.config.mts\",\n        \"tailwind.config.ts\",\n      ],\n      excludeDirs,\n    });\n\n    for (const configFile of configFiles) {\n      const content = await fs.readFile(configFile, \"utf-8\");\n\n      let updatedContent = addImport({\n        content,\n        importName: pluginName,\n        importPath: joinNormalizedPath(pluginPath, \"tailwindcss\"),\n      });\n\n      updatedContent = addToConfig({\n        content: updatedContent,\n        targetPath: \"content\",\n        valueGenerator: (b) => b.stringLiteral(classListFilePath),\n      });\n\n      updatedContent = addToConfig({\n        content: updatedContent,\n        targetPath: \"plugins\",\n        valueGenerator: (b) => b.identifier(pluginName),\n      });\n\n      if (updatedContent !== content) {\n        console.log(`Updating ${configFile} with flowbite-react configuration...`);\n        await fs.writeFile(configFile, updatedContent, \"utf-8\");\n      }\n      break;\n    }\n\n    return !!configFiles.length;\n  } catch (error) {\n    console.error(\"Failed to setup Tailwind CSS v3:\", error);\n    return false;\n  }\n}\n"],"names":["findFiles","excludeDirs","joinNormalizedPath","pluginPath","classListFilePath","addImport","pluginName","addToConfig"],"mappings":"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"}