{"version":3,"file":"compound-components.cjs","sources":["../../../src/cli/transformers/compound-components.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { parse } from \"@typescript-eslint/typescript-estree\";\nimport { visit } from \"ast-types\";\nimport * as recast from \"recast\";\nimport type { Transformer } from \"../commands/migrate\";\n\nconst COMPOUND_TO_SIMPLE_MAP: Record<string, string> = {\n  // Accordion\n  \"Accordion.Panel\": \"AccordionPanel\",\n  \"Accordion.Title\": \"AccordionTitle\",\n  \"Accordion.Content\": \"AccordionContent\",\n\n  // Avatar\n  \"Avatar.Group\": \"AvatarGroup\",\n  \"Avatar.Counter\": \"AvatarGroupCounter\",\n\n  // Banner\n  \"Banner.CollapseButton\": \"BannerCollapseButton\",\n\n  // Breadcrumb\n  \"Breadcrumb.Item\": \"BreadcrumbItem\",\n\n  // Button\n  \"Button.Group\": \"ButtonGroup\",\n\n  // Clipboard\n  \"Clipboard.WithIcon\": \"ClipboardWithIcon\",\n  \"Clipboard.WithIconText\": \"ClipboardWithIconText\",\n\n  // Drawer\n  \"Drawer.Header\": \"DrawerHeader\",\n  \"Drawer.Items\": \"DrawerItems\",\n\n  // Dropdown\n  \"Dropdown.Item\": \"DropdownItem\",\n  \"Dropdown.Header\": \"DropdownHeader\",\n  \"Dropdown.Divider\": \"DropdownDivider\",\n\n  // Footer\n  \"Footer.Brand\": \"FooterBrand\",\n  \"Footer.Copyright\": \"FooterCopyright\",\n  \"Footer.Divider\": \"FooterDivider\",\n  \"Footer.Icon\": \"FooterIcon\",\n  \"Footer.Link\": \"FooterLink\",\n  \"Footer.LinkGroup\": \"FooterLinkGroup\",\n  \"Footer.Title\": \"FooterTitle\",\n\n  // HR\n  \"HR.Icon\": \"HRIcon\",\n  \"HR.Square\": \"HRSquare\",\n  \"HR.Text\": \"HRText\",\n  \"HR.Trimmed\": \"HRTrimmed\",\n\n  // List\n  \"List.Item\": \"ListItem\",\n  \"ListGroup.Item\": \"ListGroupItem\",\n\n  // MegaMenu\n  \"MegaMenu.Dropdown\": \"MegaMenuDropdown\",\n  \"MegaMenu.DropdownToggle\": \"MegaMenuDropdownToggle\",\n\n  // Modal\n  \"Modal.Header\": \"ModalHeader\",\n  \"Modal.Body\": \"ModalBody\",\n  \"Modal.Footer\": \"ModalFooter\",\n\n  // Navbar\n  \"Navbar.Brand\": \"NavbarBrand\",\n  \"Navbar.Collapse\": \"NavbarCollapse\",\n  \"Navbar.Link\": \"NavbarLink\",\n  \"Navbar.Toggle\": \"NavbarToggle\",\n\n  // Pagination\n  \"Pagination.Button\": \"PaginationButton\",\n\n  // Rating\n  \"Rating.Star\": \"RatingStar\",\n  \"Rating.Advanced\": \"RatingAdvanced\",\n\n  // Sidebar\n  \"Sidebar.CTA\": \"SidebarCTA\",\n  \"Sidebar.Collapse\": \"SidebarCollapse\",\n  \"Sidebar.Item\": \"SidebarItem\",\n  \"Sidebar.Items\": \"SidebarItems\",\n  \"Sidebar.ItemGroup\": \"SidebarItemGroup\",\n  \"Sidebar.Logo\": \"SidebarLogo\",\n\n  // Table\n  \"Table.Head\": \"TableHead\",\n  \"Table.Body\": \"TableBody\",\n  \"Table.Row\": \"TableRow\",\n  \"Table.Cell\": \"TableCell\",\n  \"Table.HeadCell\": \"TableHeadCell\",\n\n  // Tabs\n  \"Tabs.Item\": \"TabItem\",\n\n  // Timeline\n  \"Timeline.Item\": \"TimelineItem\",\n  \"Timeline.Point\": \"TimelinePoint\",\n  \"Timeline.Content\": \"TimelineContent\",\n  \"Timeline.Time\": \"TimelineTime\",\n  \"Timeline.Title\": \"TimelineTitle\",\n  \"Timeline.Body\": \"TimelineBody\",\n\n  // Toast\n  \"Toast.Toggle\": \"ToastToggle\",\n};\n\nfunction transform(content: string): { content: string; changed: boolean } {\n  try {\n    const ast = recast.parse(content, {\n      parser: {\n        parse: (source: string) =>\n          parse(source, {\n            jsx: true,\n            loc: true,\n            range: true,\n            tokens: true,\n            errorOnUnknownASTType: false,\n            tolerant: true,\n            useJSXTextNode: true,\n          }),\n      },\n    });\n\n    let flowbiteImportPath = null;\n    const flowbiteImportSpecifiers = [];\n    let hasChanges = false;\n\n    visit(ast, {\n      visitImportDeclaration(path) {\n        const { node } = path;\n        if (\n          node.type === \"ImportDeclaration\" &&\n          (node.source.value === \"flowbite-react\" || node.source.value.startsWith(\"flowbite-react/components/\")) &&\n          Array.isArray(node.specifiers) &&\n          node.specifiers.every((s) => s.type === \"ImportSpecifier\")\n        ) {\n          flowbiteImportPath = node;\n          node.specifiers.forEach((specifier) => {\n            if (specifier.imported.type === \"Identifier\") {\n              flowbiteImportSpecifiers.push(specifier.imported.name);\n            }\n          });\n        }\n        return false;\n      },\n    });\n\n    visit(ast, {\n      visitJSXMemberExpression(path) {\n        const { node } = path;\n        if (\n          node.object.type === \"JSXIdentifier\" &&\n          node.property.type === \"JSXIdentifier\" &&\n          flowbiteImportSpecifiers.includes(node.object.name)\n        ) {\n          const compoundName = `${node.object.name}.${node.property.name}`;\n          const simpleName = COMPOUND_TO_SIMPLE_MAP[compoundName];\n\n          if (simpleName && flowbiteImportPath) {\n            // Replace the compound component with the simple one\n            path.replace(recast.types.builders.jsxIdentifier(simpleName));\n            hasChanges = true;\n\n            // Add the simple component to imports if not already present\n            if (!flowbiteImportSpecifiers.includes(simpleName)) {\n              flowbiteImportSpecifiers.push(simpleName);\n              flowbiteImportPath.specifiers.push(\n                recast.types.builders.importSpecifier(\n                  recast.types.builders.identifier(simpleName),\n                  recast.types.builders.identifier(simpleName),\n                ),\n              );\n            }\n          }\n        }\n        return false;\n      },\n    });\n\n    // Sort import specifiers alphabetically\n    if (flowbiteImportPath) {\n      flowbiteImportPath.specifiers.sort((a, b) => {\n        if (a.imported.type === \"Identifier\" && b.imported.type === \"Identifier\") {\n          return a.imported.name.localeCompare(b.imported.name);\n        }\n        return 0;\n      });\n    }\n\n    const transformedContent = recast.print(ast).code;\n    return {\n      content: transformedContent,\n      changed: hasChanges,\n    };\n  } catch (_error) {\n    // If parsing fails, return the original content unchanged\n    console.warn(\"Warning: Could not parse file, skipping transformation\");\n    return {\n      content,\n      changed: false,\n    };\n  }\n}\n\nexport const compoundComponentsTransformer: Transformer = {\n  name: \"Compound Components\",\n  transform,\n};\n"],"names":["recast","parse","visit"],"mappings":"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"}