@promakeai/cli 0.9.8 → 0.9.10

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.
Files changed (137) hide show
  1. package/README.md +111 -111
  2. package/dist/index.js +142 -142
  3. package/dist/registry/about-page.json +3 -3
  4. package/dist/registry/about-section.json +4 -4
  5. package/dist/registry/animations.json +2 -2
  6. package/dist/registry/announcement-bar.json +4 -4
  7. package/dist/registry/api.json +1 -1
  8. package/dist/registry/auth-core.json +2 -2
  9. package/dist/registry/bento-grid-section.json +4 -4
  10. package/dist/registry/blog-core.json +5 -5
  11. package/dist/registry/blog-list-page.json +4 -4
  12. package/dist/registry/blog-section.json +4 -4
  13. package/dist/registry/cards-carousel-section.json +4 -4
  14. package/dist/registry/cart-drawer.json +4 -4
  15. package/dist/registry/cart-page.json +4 -4
  16. package/dist/registry/case-study-page.json +3 -3
  17. package/dist/registry/category-section.json +4 -4
  18. package/dist/registry/checkout-page.json +4 -4
  19. package/dist/registry/coming-soon-page-minimal.json +4 -4
  20. package/dist/registry/coming-soon-page.json +4 -4
  21. package/dist/registry/contact-info-grid.json +4 -4
  22. package/dist/registry/contact-page-centered.json +4 -4
  23. package/dist/registry/contact-page-map-overlay.json +3 -3
  24. package/dist/registry/contact-page-map-split.json +3 -3
  25. package/dist/registry/contact-page-split.json +4 -4
  26. package/dist/registry/contact-page.json +4 -4
  27. package/dist/registry/content-section.json +4 -4
  28. package/dist/registry/cookie-consent.json +4 -4
  29. package/dist/registry/cookies-page.json +3 -3
  30. package/dist/registry/cta-section.json +3 -3
  31. package/dist/registry/ecommerce-core.json +8 -8
  32. package/dist/registry/empty-page.json +3 -3
  33. package/dist/registry/faq-categorized.json +4 -4
  34. package/dist/registry/faq-simple.json +4 -4
  35. package/dist/registry/favorites-blog-block.json +1 -1
  36. package/dist/registry/favorites-blog-page.json +4 -4
  37. package/dist/registry/favorites-ecommerce-block.json +1 -1
  38. package/dist/registry/favorites-ecommerce-page.json +4 -4
  39. package/dist/registry/feature-section.json +3 -3
  40. package/dist/registry/featured-products.json +4 -4
  41. package/dist/registry/footer-detailed.json +4 -4
  42. package/dist/registry/footer-minimal.json +3 -3
  43. package/dist/registry/footer.json +3 -3
  44. package/dist/registry/forgot-password-page-split.json +4 -4
  45. package/dist/registry/forgot-password-page.json +4 -4
  46. package/dist/registry/google-adsense.json +4 -4
  47. package/dist/registry/google-map.json +2 -2
  48. package/dist/registry/header-centered-pill.json +4 -4
  49. package/dist/registry/header-ecommerce.json +4 -4
  50. package/dist/registry/header-mega.json +4 -4
  51. package/dist/registry/header-minimal.json +4 -4
  52. package/dist/registry/header-simple.json +3 -3
  53. package/dist/registry/hero-carousel.json +3 -3
  54. package/dist/registry/hero-cta.json +4 -4
  55. package/dist/registry/hero-gradient.json +4 -4
  56. package/dist/registry/hero-grid.json +4 -4
  57. package/dist/registry/hero-profile.json +3 -3
  58. package/dist/registry/hero.json +3 -3
  59. package/dist/registry/index.json +103 -103
  60. package/dist/registry/landing-page-app.json +3 -3
  61. package/dist/registry/landing-page-saas.json +3 -3
  62. package/dist/registry/login-page-split.json +4 -4
  63. package/dist/registry/login-page.json +4 -4
  64. package/dist/registry/logo-cloud.json +4 -4
  65. package/dist/registry/masonry-grid.json +3 -3
  66. package/dist/registry/my-orders-page.json +4 -4
  67. package/dist/registry/newsletter-section.json +4 -4
  68. package/dist/registry/order-card-compact.json +3 -3
  69. package/dist/registry/order-confirmation-page.json +4 -4
  70. package/dist/registry/order-detail-block.json +1 -1
  71. package/dist/registry/orders-list-block.json +1 -1
  72. package/dist/registry/payment-success-block.json +2 -2
  73. package/dist/registry/portfolio-page.json +4 -4
  74. package/dist/registry/post-card.json +4 -4
  75. package/dist/registry/post-detail-block.json +4 -4
  76. package/dist/registry/post-detail-page.json +4 -4
  77. package/dist/registry/pricing-card.json +3 -3
  78. package/dist/registry/pricing-page.json +4 -4
  79. package/dist/registry/pricing-section.json +4 -4
  80. package/dist/registry/privacy-page.json +3 -3
  81. package/dist/registry/product-card-detailed.json +4 -4
  82. package/dist/registry/product-card-hover.json +4 -4
  83. package/dist/registry/product-card.json +4 -4
  84. package/dist/registry/product-detail-block.json +2 -2
  85. package/dist/registry/product-detail-page.json +4 -4
  86. package/dist/registry/product-detail-section.json +4 -4
  87. package/dist/registry/product-quick-view.json +4 -4
  88. package/dist/registry/products-page.json +4 -4
  89. package/dist/registry/reading-progress.json +4 -4
  90. package/dist/registry/register-page-split.json +4 -4
  91. package/dist/registry/register-page.json +4 -4
  92. package/dist/registry/related-posts-block.json +1 -1
  93. package/dist/registry/related-products-block.json +2 -2
  94. package/dist/registry/reset-password-page-split.json +4 -4
  95. package/dist/registry/reset-password-page.json +4 -4
  96. package/dist/registry/service-card.json +1 -1
  97. package/dist/registry/share-buttons.json +4 -4
  98. package/dist/registry/skill-card.json +1 -1
  99. package/dist/registry/team-page.json +4 -4
  100. package/dist/registry/terms-page.json +3 -3
  101. package/dist/registry/testimonials-carousel.json +4 -4
  102. package/dist/registry/testimonials-grid.json +4 -4
  103. package/dist/registry/timeline-section.json +4 -4
  104. package/dist/registry/verify-email-page.json +4 -4
  105. package/dist/registry/video-hero.json +4 -4
  106. package/dist/registry/youtube-embed.json +4 -4
  107. package/package.json +1 -1
  108. package/template/.env +5 -5
  109. package/template/README.md +54 -54
  110. package/template/eslint.config.js +41 -41
  111. package/template/index.html +237 -237
  112. package/template/package.json +96 -96
  113. package/template/public/_redirects +1 -1
  114. package/template/public/robots.txt +14 -14
  115. package/template/scripts/init-db.ts +18 -18
  116. package/template/src/App.tsx +21 -21
  117. package/template/src/components/FormField.tsx +48 -48
  118. package/template/src/components/FormFileInput.tsx +75 -75
  119. package/template/src/components/GoogleAnalytics.tsx +34 -34
  120. package/template/src/components/LanguageSwitcher.tsx +53 -53
  121. package/template/src/components/MetriaAnalytics.tsx +68 -68
  122. package/template/src/components/PasswordInput.tsx +60 -60
  123. package/template/src/components/ScriptInjector.tsx +62 -62
  124. package/template/src/components/Stack.tsx +39 -39
  125. package/template/src/constants/constants.json +71 -71
  126. package/template/src/db/index.ts +21 -21
  127. package/template/src/db/provider.tsx +106 -106
  128. package/template/src/db/schema.json +278 -278
  129. package/template/src/db/types.ts +195 -195
  130. package/template/src/hooks/use-debounced-value.ts +12 -12
  131. package/template/src/hooks/use-page-title.ts +55 -55
  132. package/template/src/lang/index.ts +90 -90
  133. package/template/src/lib/api.ts +345 -345
  134. package/template/src/lib/env.ts +19 -19
  135. package/template/src/router.tsx +14 -14
  136. package/template/src/vite-env.d.ts +1 -1
  137. package/template/vite.config.ts +194 -194
@@ -17,25 +17,25 @@
17
17
  "path": "header-mega/index.ts",
18
18
  "type": "registry:index",
19
19
  "target": "$modules$/header-mega/index.ts",
20
- "content": "export * from './header-mega';\r\n"
20
+ "content": "export * from './header-mega';\n"
21
21
  },
22
22
  {
23
23
  "path": "header-mega/header-mega.tsx",
24
24
  "type": "registry:component",
25
25
  "target": "$modules$/header-mega/header-mega.tsx",
26
- "content": "import { Link } from \"react-router\";\r\nimport { Book, Menu, Sunset, Trees, Zap } from \"lucide-react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\r\n Accordion,\r\n AccordionContent,\r\n AccordionItem,\r\n AccordionTrigger,\r\n} from \"@/components/ui/accordion\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n NavigationMenu,\r\n NavigationMenuContent,\r\n NavigationMenuItem,\r\n NavigationMenuLink,\r\n NavigationMenuList,\r\n NavigationMenuTrigger,\r\n} from \"@/components/ui/navigation-menu\";\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetTrigger,\r\n} from \"@/components/ui/sheet\";\r\nimport constants from \"@/constants/constants.json\";\r\n\r\ninterface MenuItem {\r\n title: string;\r\n url: string;\r\n description?: string;\r\n icon?: React.ReactNode;\r\n items?: MenuItem[];\r\n}\r\n\r\ninterface HeaderMegaProps {\r\n className?: string;\r\n}\r\n\r\nexport function HeaderMega({ className }: HeaderMegaProps) {\r\n const { t } = useTranslation(\"header-mega\");\r\n\r\n const menu: MenuItem[] = [\r\n { title: t(\"home\", \"Home\"), url: \"/\" },\r\n {\r\n title: t(\"products\", \"Products\"),\r\n url: \"/products\",\r\n items: [\r\n {\r\n title: t(\"allProducts\", \"All Products\"),\r\n description: t(\r\n \"allProductsDesc\",\r\n \"Browse our complete product catalog\"\r\n ),\r\n icon: <Book className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/products\",\r\n },\r\n {\r\n title: t(\"featured\", \"Featured\"),\r\n description: t(\r\n \"featuredDesc\",\r\n \"Our handpicked selection of top products\"\r\n ),\r\n icon: <Trees className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/products?featured=true\",\r\n },\r\n {\r\n title: t(\"newArrivals\", \"New Arrivals\"),\r\n description: t(\"newArrivalsDesc\", \"Check out the latest additions\"),\r\n icon: <Sunset className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/products?is_new=true\",\r\n },\r\n {\r\n title: t(\"onSale\", \"On Sale\"),\r\n description: t(\"onSaleDesc\", \"Great deals and special offers\"),\r\n icon: <Zap className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/products?on_sale=true\",\r\n },\r\n ],\r\n },\r\n {\r\n title: t(\"company\", \"Company\"),\r\n url: \"#\",\r\n items: [\r\n {\r\n title: t(\"aboutUs\", \"About Us\"),\r\n description: t(\r\n \"aboutUsDesc\",\r\n \"Learn more about our story and mission\"\r\n ),\r\n icon: <Trees className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/about\",\r\n },\r\n {\r\n title: t(\"contact\", \"Contact\"),\r\n description: t(\"contactDesc\", \"Get in touch with our team\"),\r\n icon: <Sunset className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/contact\",\r\n },\r\n {\r\n title: t(\"blog\", \"Blog\"),\r\n description: t(\"blogDesc\", \"Read our latest articles and updates\"),\r\n icon: <Book className=\"h-5 w-5 shrink-0\" />,\r\n url: \"/blog\",\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n const renderMenuItem = (item: MenuItem) => {\r\n if (item.items) {\r\n return (\r\n <NavigationMenuItem key={item.title}>\r\n <NavigationMenuTrigger>{item.title}</NavigationMenuTrigger>\r\n <NavigationMenuContent className=\"z-50 bg-popover text-popover-foreground\">\r\n {item.items.map((subItem) => (\r\n <NavigationMenuLink asChild key={subItem.title} className=\"w-80\">\r\n <SubMenuLink item={subItem} />\r\n </NavigationMenuLink>\r\n ))}\r\n </NavigationMenuContent>\r\n </NavigationMenuItem>\r\n );\r\n }\r\n\r\n return (\r\n <NavigationMenuItem key={item.title}>\r\n <NavigationMenuLink asChild>\r\n <Link\r\n to={item.url}\r\n className=\"group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-muted hover:text-accent-foreground\"\r\n >\r\n {item.title}\r\n </Link>\r\n </NavigationMenuLink>\r\n </NavigationMenuItem>\r\n );\r\n };\r\n\r\n const renderMobileMenuItem = (item: MenuItem) => {\r\n if (item.items) {\r\n return (\r\n <AccordionItem\r\n key={item.title}\r\n value={item.title}\r\n className=\"border-b-0\"\r\n >\r\n <AccordionTrigger className=\"text-md py-0 font-semibold hover:no-underline\">\r\n {item.title}\r\n </AccordionTrigger>\r\n <AccordionContent className=\"mt-2\">\r\n {item.items.map((subItem) => (\r\n <SubMenuLink key={subItem.title} item={subItem} />\r\n ))}\r\n </AccordionContent>\r\n </AccordionItem>\r\n );\r\n }\r\n\r\n return (\r\n <Link key={item.title} to={item.url} className=\"text-md font-semibold\">\r\n {item.title}\r\n </Link>\r\n );\r\n };\r\n\r\n return (\r\n <header\r\n className={cn(\r\n \"relative z-50 py-4 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 overflow-visible\",\r\n className\r\n )}\r\n >\r\n <div className=\"container max-w-7xl mx-auto px-4\">\r\n {/* Desktop Menu */}\r\n <nav className=\"hidden items-center justify-between lg:flex overflow-visible\">\r\n <div className=\"flex items-center gap-6\">\r\n {/* Logo */}\r\n <Link to=\"/\" className=\"flex items-center gap-2\">\r\n <img\r\n src=\"/images/logo.png\"\r\n className=\"h-8 w-auto\"\r\n alt={constants.site.name}\r\n onError={(e) => {\r\n e.currentTarget.style.display = \"none\";\r\n }}\r\n />\r\n <span className=\"text-lg font-semibold tracking-tight\">\r\n {constants.site.name}\r\n </span>\r\n </Link>\r\n <div className=\"flex items-center\">\r\n <NavigationMenu viewport={false}>\r\n <NavigationMenuList>\r\n {menu.map((item) => renderMenuItem(item))}\r\n </NavigationMenuList>\r\n </NavigationMenu>\r\n </div>\r\n </div>\r\n <div className=\"flex gap-2\">\r\n <Button asChild variant=\"outline\" size=\"sm\">\r\n <Link to=\"/login\">{t(\"login\", \"Login\")}</Link>\r\n </Button>\r\n <Button asChild size=\"sm\">\r\n <Link to=\"/register\">{t(\"signup\", \"Sign up\")}</Link>\r\n </Button>\r\n </div>\r\n </nav>\r\n\r\n {/* Mobile Menu */}\r\n <div className=\"block lg:hidden\">\r\n <div className=\"flex items-center justify-between\">\r\n {/* Logo */}\r\n <Link to=\"/\" className=\"flex items-center gap-2\">\r\n <img\r\n src=\"/images/logo.png\"\r\n className=\"h-8 w-auto\"\r\n alt={constants.site.name}\r\n onError={(e) => {\r\n e.currentTarget.style.display = \"none\";\r\n }}\r\n />\r\n <span className=\"text-lg font-semibold tracking-tight\">\r\n {constants.site.name}\r\n </span>\r\n </Link>\r\n <Sheet>\r\n <SheetTrigger asChild>\r\n <Button variant=\"outline\" size=\"icon\">\r\n <Menu className=\"h-4 w-4\" />\r\n </Button>\r\n </SheetTrigger>\r\n <SheetContent className=\"z-50 overflow-y-auto px-6\">\r\n <SheetHeader>\r\n <SheetTitle>\r\n <Link to=\"/\" className=\"flex items-center gap-2\">\r\n <img\r\n src=\"/images/logo.png\"\r\n className=\"h-8 w-auto\"\r\n alt={constants.site.name}\r\n onError={(e) => {\r\n e.currentTarget.style.display = \"none\";\r\n }}\r\n />\r\n </Link>\r\n </SheetTitle>\r\n </SheetHeader>\r\n <div className=\"flex flex-col gap-6 p-4\">\r\n <Accordion\r\n type=\"single\"\r\n collapsible\r\n className=\"flex w-full flex-col gap-4\"\r\n >\r\n {menu.map((item) => renderMobileMenuItem(item))}\r\n </Accordion>\r\n\r\n <div className=\"flex flex-col gap-3\">\r\n <Button asChild variant=\"outline\">\r\n <Link to=\"/login\">{t(\"login\", \"Login\")}</Link>\r\n </Button>\r\n <Button asChild>\r\n <Link to=\"/register\">{t(\"signup\", \"Sign up\")}</Link>\r\n </Button>\r\n </div>\r\n </div>\r\n </SheetContent>\r\n </Sheet>\r\n </div>\r\n </div>\r\n </div>\r\n </header>\r\n );\r\n}\r\n\r\nfunction SubMenuLink({ item }: { item: MenuItem }) {\r\n return (\r\n <Link\r\n to={item.url}\r\n className=\"flex min-w-80 flex-row gap-4 rounded-md p-3 leading-none no-underline transition-colors outline-none select-none hover:bg-muted hover:text-accent-foreground\"\r\n >\r\n <div className=\"text-foreground\">{item.icon}</div>\r\n <div>\r\n <div className=\"text-sm font-semibold\">{item.title}</div>\r\n {item.description && (\r\n <p className=\"text-sm leading-snug text-muted-foreground\">\r\n {item.description}\r\n </p>\r\n )}\r\n </div>\r\n </Link>\r\n );\r\n}\r\n"
26
+ "content": "import { Link } from \"react-router\";\nimport { Book, Menu, Sunset, Trees, Zap } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"@/lib/utils\";\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/components/ui/sheet\";\nimport constants from \"@/constants/constants.json\";\n\ninterface MenuItem {\n title: string;\n url: string;\n description?: string;\n icon?: React.ReactNode;\n items?: MenuItem[];\n}\n\ninterface HeaderMegaProps {\n className?: string;\n}\n\nexport function HeaderMega({ className }: HeaderMegaProps) {\n const { t } = useTranslation(\"header-mega\");\n\n const menu: MenuItem[] = [\n { title: t(\"home\", \"Home\"), url: \"/\" },\n {\n title: t(\"products\", \"Products\"),\n url: \"/products\",\n items: [\n {\n title: t(\"allProducts\", \"All Products\"),\n description: t(\n \"allProductsDesc\",\n \"Browse our complete product catalog\"\n ),\n icon: <Book className=\"h-5 w-5 shrink-0\" />,\n url: \"/products\",\n },\n {\n title: t(\"featured\", \"Featured\"),\n description: t(\n \"featuredDesc\",\n \"Our handpicked selection of top products\"\n ),\n icon: <Trees className=\"h-5 w-5 shrink-0\" />,\n url: \"/products?featured=true\",\n },\n {\n title: t(\"newArrivals\", \"New Arrivals\"),\n description: t(\"newArrivalsDesc\", \"Check out the latest additions\"),\n icon: <Sunset className=\"h-5 w-5 shrink-0\" />,\n url: \"/products?is_new=true\",\n },\n {\n title: t(\"onSale\", \"On Sale\"),\n description: t(\"onSaleDesc\", \"Great deals and special offers\"),\n icon: <Zap className=\"h-5 w-5 shrink-0\" />,\n url: \"/products?on_sale=true\",\n },\n ],\n },\n {\n title: t(\"company\", \"Company\"),\n url: \"#\",\n items: [\n {\n title: t(\"aboutUs\", \"About Us\"),\n description: t(\n \"aboutUsDesc\",\n \"Learn more about our story and mission\"\n ),\n icon: <Trees className=\"h-5 w-5 shrink-0\" />,\n url: \"/about\",\n },\n {\n title: t(\"contact\", \"Contact\"),\n description: t(\"contactDesc\", \"Get in touch with our team\"),\n icon: <Sunset className=\"h-5 w-5 shrink-0\" />,\n url: \"/contact\",\n },\n {\n title: t(\"blog\", \"Blog\"),\n description: t(\"blogDesc\", \"Read our latest articles and updates\"),\n icon: <Book className=\"h-5 w-5 shrink-0\" />,\n url: \"/blog\",\n },\n ],\n },\n ];\n\n const renderMenuItem = (item: MenuItem) => {\n if (item.items) {\n return (\n <NavigationMenuItem key={item.title}>\n <NavigationMenuTrigger>{item.title}</NavigationMenuTrigger>\n <NavigationMenuContent className=\"z-50 bg-popover text-popover-foreground\">\n {item.items.map((subItem) => (\n <NavigationMenuLink asChild key={subItem.title} className=\"w-80\">\n <SubMenuLink item={subItem} />\n </NavigationMenuLink>\n ))}\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem key={item.title}>\n <NavigationMenuLink asChild>\n <Link\n to={item.url}\n className=\"group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-muted hover:text-accent-foreground\"\n >\n {item.title}\n </Link>\n </NavigationMenuLink>\n </NavigationMenuItem>\n );\n };\n\n const renderMobileMenuItem = (item: MenuItem) => {\n if (item.items) {\n return (\n <AccordionItem\n key={item.title}\n value={item.title}\n className=\"border-b-0\"\n >\n <AccordionTrigger className=\"text-md py-0 font-semibold hover:no-underline\">\n {item.title}\n </AccordionTrigger>\n <AccordionContent className=\"mt-2\">\n {item.items.map((subItem) => (\n <SubMenuLink key={subItem.title} item={subItem} />\n ))}\n </AccordionContent>\n </AccordionItem>\n );\n }\n\n return (\n <Link key={item.title} to={item.url} className=\"text-md font-semibold\">\n {item.title}\n </Link>\n );\n };\n\n return (\n <header\n className={cn(\n \"relative z-50 py-4 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 overflow-visible\",\n className\n )}\n >\n <div className=\"container max-w-7xl mx-auto px-4\">\n {/* Desktop Menu */}\n <nav className=\"hidden items-center justify-between lg:flex overflow-visible\">\n <div className=\"flex items-center gap-6\">\n {/* Logo */}\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <img\n src=\"/images/logo.png\"\n className=\"h-8 w-auto\"\n alt={constants.site.name}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n <span className=\"text-lg font-semibold tracking-tight\">\n {constants.site.name}\n </span>\n </Link>\n <div className=\"flex items-center\">\n <NavigationMenu viewport={false}>\n <NavigationMenuList>\n {menu.map((item) => renderMenuItem(item))}\n </NavigationMenuList>\n </NavigationMenu>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button asChild variant=\"outline\" size=\"sm\">\n <Link to=\"/login\">{t(\"login\", \"Login\")}</Link>\n </Button>\n <Button asChild size=\"sm\">\n <Link to=\"/register\">{t(\"signup\", \"Sign up\")}</Link>\n </Button>\n </div>\n </nav>\n\n {/* Mobile Menu */}\n <div className=\"block lg:hidden\">\n <div className=\"flex items-center justify-between\">\n {/* Logo */}\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <img\n src=\"/images/logo.png\"\n className=\"h-8 w-auto\"\n alt={constants.site.name}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n <span className=\"text-lg font-semibold tracking-tight\">\n {constants.site.name}\n </span>\n </Link>\n <Sheet>\n <SheetTrigger asChild>\n <Button variant=\"outline\" size=\"icon\">\n <Menu className=\"h-4 w-4\" />\n </Button>\n </SheetTrigger>\n <SheetContent className=\"z-50 overflow-y-auto px-6\">\n <SheetHeader>\n <SheetTitle>\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <img\n src=\"/images/logo.png\"\n className=\"h-8 w-auto\"\n alt={constants.site.name}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n </Link>\n </SheetTitle>\n </SheetHeader>\n <div className=\"flex flex-col gap-6 p-4\">\n <Accordion\n type=\"single\"\n collapsible\n className=\"flex w-full flex-col gap-4\"\n >\n {menu.map((item) => renderMobileMenuItem(item))}\n </Accordion>\n\n <div className=\"flex flex-col gap-3\">\n <Button asChild variant=\"outline\">\n <Link to=\"/login\">{t(\"login\", \"Login\")}</Link>\n </Button>\n <Button asChild>\n <Link to=\"/register\">{t(\"signup\", \"Sign up\")}</Link>\n </Button>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n </div>\n </header>\n );\n}\n\nfunction SubMenuLink({ item }: { item: MenuItem }) {\n return (\n <Link\n to={item.url}\n className=\"flex min-w-80 flex-row gap-4 rounded-md p-3 leading-none no-underline transition-colors outline-none select-none hover:bg-muted hover:text-accent-foreground\"\n >\n <div className=\"text-foreground\">{item.icon}</div>\n <div>\n <div className=\"text-sm font-semibold\">{item.title}</div>\n {item.description && (\n <p className=\"text-sm leading-snug text-muted-foreground\">\n {item.description}\n </p>\n )}\n </div>\n </Link>\n );\n}\n"
27
27
  },
28
28
  {
29
29
  "path": "header-mega/lang/en.json",
30
30
  "type": "registry:lang",
31
31
  "target": "$modules$/header-mega/lang/en.json",
32
- "content": "{\r\n \"home\": \"Home\",\r\n \"products\": \"Products\",\r\n \"allProducts\": \"All Products\",\r\n \"allProductsDesc\": \"Brief description that appears in the mega menu. Explain what visitors will find in your full product catalog. Use Promake to customize this menu text to guide navigation.\",\r\n \"featured\": \"Featured\",\r\n \"featuredDesc\": \"Menu description for your featured or highlighted products. Explain what makes these items special or recommended. Customize with Promake.\",\r\n \"newArrivals\": \"New Arrivals\",\r\n \"newArrivalsDesc\": \"Menu text describing your latest products. Create interest in what's new. Use Promake to customize this navigation description.\",\r\n \"onSale\": \"On Sale\",\r\n \"onSaleDesc\": \"Menu description for sale or discounted items. Highlight current promotions or deals. Customize with Promake to drive interest.\",\r\n \"company\": \"About\",\r\n \"aboutUs\": \"About Us\",\r\n \"aboutUsDesc\": \"Brief menu description of your about page. Tease what visitors will learn about your company, mission, or story. Customize with Promake.\",\r\n \"contact\": \"Contact\",\r\n \"contactDesc\": \"Menu text that encourages visitors to get in touch. Mention how you can help or your availability. Use Promake to create inviting contact text.\",\r\n \"blog\": \"Blog\",\r\n \"blogDesc\": \"Menu description for your blog section. Explain what type of content you publish or topics you cover. Customize with Promake.\",\r\n \"login\": \"Login\",\r\n \"signup\": \"Sign up\"\r\n}\r\n"
32
+ "content": "{\n \"home\": \"Home\",\n \"products\": \"Products\",\n \"allProducts\": \"All Products\",\n \"allProductsDesc\": \"Brief description that appears in the mega menu. Explain what visitors will find in your full product catalog. Use Promake to customize this menu text to guide navigation.\",\n \"featured\": \"Featured\",\n \"featuredDesc\": \"Menu description for your featured or highlighted products. Explain what makes these items special or recommended. Customize with Promake.\",\n \"newArrivals\": \"New Arrivals\",\n \"newArrivalsDesc\": \"Menu text describing your latest products. Create interest in what's new. Use Promake to customize this navigation description.\",\n \"onSale\": \"On Sale\",\n \"onSaleDesc\": \"Menu description for sale or discounted items. Highlight current promotions or deals. Customize with Promake to drive interest.\",\n \"company\": \"About\",\n \"aboutUs\": \"About Us\",\n \"aboutUsDesc\": \"Brief menu description of your about page. Tease what visitors will learn about your company, mission, or story. Customize with Promake.\",\n \"contact\": \"Contact\",\n \"contactDesc\": \"Menu text that encourages visitors to get in touch. Mention how you can help or your availability. Use Promake to create inviting contact text.\",\n \"blog\": \"Blog\",\n \"blogDesc\": \"Menu description for your blog section. Explain what type of content you publish or topics you cover. Customize with Promake.\",\n \"login\": \"Login\",\n \"signup\": \"Sign up\"\n}\n"
33
33
  },
34
34
  {
35
35
  "path": "header-mega/lang/tr.json",
36
36
  "type": "registry:lang",
37
37
  "target": "$modules$/header-mega/lang/tr.json",
38
- "content": "{\r\n \"home\": \"Ana Sayfa\",\r\n \"products\": \"Ürünler\",\r\n \"allProducts\": \"Tüm Ürünler\",\r\n \"allProductsDesc\": \"Mega menüde görünen kısa açıklama. Ziyaretçilerin tam ürün kataloğunuzda neleri bulacağını açıklayın. Promake ile bu menü metnini navigasyonu yönlendirmek için özelleştirin.\",\r\n \"featured\": \"Öne Çıkanlar\",\r\n \"featuredDesc\": \"Öne çıkan veya önerilen ürünleriniz için menü açıklaması. Bu ürünleri özel veya önerilen yapan şeyi açıklayın. Promake ile özelleştirin.\",\r\n \"newArrivals\": \"Yeni Gelenler\",\r\n \"newArrivalsDesc\": \"En son ürünlerinizi açıklayan menü metni. Yeni olanda ilgi yaratın. Promake ile bu navigasyon açıklamasını özelleştirin.\",\r\n \"onSale\": \"İndirimde\",\r\n \"onSaleDesc\": \"İndirimli veya promosyonlu ürünler için menü açıklaması. Güncel promosyonları veya fırsatları vurgulayın. Promake ile ilgi uyandırmak için özelleştirin.\",\r\n \"company\": \"Hakkında\",\r\n \"aboutUs\": \"Hakkımızda\",\r\n \"aboutUsDesc\": \"Hakkımızda sayfanızın kısa menü açıklaması. Ziyaretçilerin şirketiniz, misyonunuz veya hikayeniz hakkında ne öğreneceklerini vurgulayın. Promake ile özelleştirin.\",\r\n \"contact\": \"İletişim\",\r\n \"contactDesc\": \"Ziyaretçileri iletişime geçmeye teşvik eden menü metni. Nasıl yardımcı olabileceğinizden veya müsaitliğinizden bahsedin. Promake ile davetkar iletişim metni oluşturun.\",\r\n \"blog\": \"Blog\",\r\n \"blogDesc\": \"Blog bölümünüz için menü açıklaması. Ne tür içerik yayınladığınızı veya hangi konuları ele aldığınızı açıklayın. Promake ile özelleştirin.\",\r\n \"login\": \"Giriş Yap\",\r\n \"signup\": \"Kayıt Ol\"\r\n}\r\n"
38
+ "content": "{\n \"home\": \"Ana Sayfa\",\n \"products\": \"Ürünler\",\n \"allProducts\": \"Tüm Ürünler\",\n \"allProductsDesc\": \"Mega menüde görünen kısa açıklama. Ziyaretçilerin tam ürün kataloğunuzda neleri bulacağını açıklayın. Promake ile bu menü metnini navigasyonu yönlendirmek için özelleştirin.\",\n \"featured\": \"Öne Çıkanlar\",\n \"featuredDesc\": \"Öne çıkan veya önerilen ürünleriniz için menü açıklaması. Bu ürünleri özel veya önerilen yapan şeyi açıklayın. Promake ile özelleştirin.\",\n \"newArrivals\": \"Yeni Gelenler\",\n \"newArrivalsDesc\": \"En son ürünlerinizi açıklayan menü metni. Yeni olanda ilgi yaratın. Promake ile bu navigasyon açıklamasını özelleştirin.\",\n \"onSale\": \"İndirimde\",\n \"onSaleDesc\": \"İndirimli veya promosyonlu ürünler için menü açıklaması. Güncel promosyonları veya fırsatları vurgulayın. Promake ile ilgi uyandırmak için özelleştirin.\",\n \"company\": \"Hakkında\",\n \"aboutUs\": \"Hakkımızda\",\n \"aboutUsDesc\": \"Hakkımızda sayfanızın kısa menü açıklaması. Ziyaretçilerin şirketiniz, misyonunuz veya hikayeniz hakkında ne öğreneceklerini vurgulayın. Promake ile özelleştirin.\",\n \"contact\": \"İletişim\",\n \"contactDesc\": \"Ziyaretçileri iletişime geçmeye teşvik eden menü metni. Nasıl yardımcı olabileceğinizden veya müsaitliğinizden bahsedin. Promake ile davetkar iletişim metni oluşturun.\",\n \"blog\": \"Blog\",\n \"blogDesc\": \"Blog bölümünüz için menü açıklaması. Ne tür içerik yayınladığınızı veya hangi konuları ele aldığınızı açıklayın. Promake ile özelleştirin.\",\n \"login\": \"Giriş Yap\",\n \"signup\": \"Kayıt Ol\"\n}\n"
39
39
  }
40
40
  ],
41
41
  "exports": {
@@ -15,25 +15,25 @@
15
15
  "path": "header-minimal/index.ts",
16
16
  "type": "registry:index",
17
17
  "target": "$modules$/header-minimal/index.ts",
18
- "content": "export * from './header-minimal';\r\n"
18
+ "content": "export * from './header-minimal';\n"
19
19
  },
20
20
  {
21
21
  "path": "header-minimal/header-minimal.tsx",
22
22
  "type": "registry:component",
23
23
  "target": "$modules$/header-minimal/header-minimal.tsx",
24
- "content": "import { Link } from \"react-router\";\r\nimport { Menu } from \"lucide-react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetTrigger,\r\n} from \"@/components/ui/sheet\";\r\nimport constants from \"@/constants/constants.json\";\r\n\r\ninterface HeaderMinimalProps {\r\n className?: string;\r\n}\r\n\r\nexport function HeaderMinimal({ className }: HeaderMinimalProps) {\r\n const { t } = useTranslation(\"header-minimal\");\r\n\r\n const links = [\r\n { title: t(\"home\", \"Home\"), url: \"/\" },\r\n { title: t(\"about\", \"About\"), url: \"/about\" },\r\n ];\r\n\r\n return (\r\n <header className={cn(\"py-4 border-b bg-background\", className)}>\r\n <div className=\"container max-w-7xl mx-auto px-4\">\r\n <nav className=\"flex items-center justify-between\">\r\n {/* Logo */}\r\n <Link to=\"/\" className=\"flex items-center gap-2\">\r\n <img\r\n src=\"/images/logo.png\"\r\n className=\"h-8 w-auto\"\r\n alt={constants.site.name}\r\n onError={(e) => {\r\n e.currentTarget.style.display = \"none\";\r\n }}\r\n />\r\n <span className=\"text-xl font-bold tracking-tight\">\r\n {constants.site.name}\r\n </span>\r\n </Link>\r\n\r\n {/* Desktop Links */}\r\n <div className=\"hidden md:flex items-center gap-8\">\r\n {links.map((link) => (\r\n <Link\r\n key={link.title}\r\n to={link.url}\r\n className=\"text-sm font-medium text-muted-foreground hover:text-foreground transition-colors\"\r\n >\r\n {link.title}\r\n </Link>\r\n ))}\r\n </div>\r\n\r\n {/* CTA Button - Desktop */}\r\n <div className=\"hidden md:block\">\r\n <Button asChild>\r\n <Link to=\"/contact\">{t(\"cta\", \"Contact\")}</Link>\r\n </Button>\r\n </div>\r\n\r\n {/* Mobile Menu */}\r\n <div className=\"md:hidden\">\r\n <Sheet>\r\n <SheetTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Menu className=\"h-5 w-5\" />\r\n </Button>\r\n </SheetTrigger>\r\n <SheetContent side=\"right\" className=\"px-6\">\r\n <SheetHeader>\r\n <SheetTitle>\r\n <Link to=\"/\" className=\"flex items-center gap-2\">\r\n <span className=\"text-xl font-bold\">\r\n {constants.site.name}\r\n </span>\r\n </Link>\r\n </SheetTitle>\r\n </SheetHeader>\r\n <div className=\"flex flex-col gap-4 mt-8\">\r\n {links.map((link) => (\r\n <Link\r\n key={link.title}\r\n to={link.url}\r\n className=\"text-lg font-medium hover:text-primary transition-colors\"\r\n >\r\n {link.title}\r\n </Link>\r\n ))}\r\n <Button asChild className=\"mt-4\">\r\n <Link to=\"/contact\">{t(\"cta\", \"Contact\")}</Link>\r\n </Button>\r\n </div>\r\n </SheetContent>\r\n </Sheet>\r\n </div>\r\n </nav>\r\n </div>\r\n </header>\r\n );\r\n}\r\n"
24
+ "content": "import { Link } from \"react-router\";\nimport { Menu } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/components/ui/sheet\";\nimport constants from \"@/constants/constants.json\";\n\ninterface HeaderMinimalProps {\n className?: string;\n}\n\nexport function HeaderMinimal({ className }: HeaderMinimalProps) {\n const { t } = useTranslation(\"header-minimal\");\n\n const links = [\n { title: t(\"home\", \"Home\"), url: \"/\" },\n { title: t(\"about\", \"About\"), url: \"/about\" },\n ];\n\n return (\n <header className={cn(\"py-4 border-b bg-background\", className)}>\n <div className=\"container max-w-7xl mx-auto px-4\">\n <nav className=\"flex items-center justify-between\">\n {/* Logo */}\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <img\n src=\"/images/logo.png\"\n className=\"h-8 w-auto\"\n alt={constants.site.name}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n <span className=\"text-xl font-bold tracking-tight\">\n {constants.site.name}\n </span>\n </Link>\n\n {/* Desktop Links */}\n <div className=\"hidden md:flex items-center gap-8\">\n {links.map((link) => (\n <Link\n key={link.title}\n to={link.url}\n className=\"text-sm font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n {link.title}\n </Link>\n ))}\n </div>\n\n {/* CTA Button - Desktop */}\n <div className=\"hidden md:block\">\n <Button asChild>\n <Link to=\"/contact\">{t(\"cta\", \"Contact\")}</Link>\n </Button>\n </div>\n\n {/* Mobile Menu */}\n <div className=\"md:hidden\">\n <Sheet>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <Menu className=\"h-5 w-5\" />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"px-6\">\n <SheetHeader>\n <SheetTitle>\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <span className=\"text-xl font-bold\">\n {constants.site.name}\n </span>\n </Link>\n </SheetTitle>\n </SheetHeader>\n <div className=\"flex flex-col gap-4 mt-8\">\n {links.map((link) => (\n <Link\n key={link.title}\n to={link.url}\n className=\"text-lg font-medium hover:text-primary transition-colors\"\n >\n {link.title}\n </Link>\n ))}\n <Button asChild className=\"mt-4\">\n <Link to=\"/contact\">{t(\"cta\", \"Contact\")}</Link>\n </Button>\n </div>\n </SheetContent>\n </Sheet>\n </div>\n </nav>\n </div>\n </header>\n );\n}\n"
25
25
  },
26
26
  {
27
27
  "path": "header-minimal/lang/en.json",
28
28
  "type": "registry:lang",
29
29
  "target": "$modules$/header-minimal/lang/en.json",
30
- "content": "{\r\n \"home\": \"Home\",\r\n \"about\": \"About\",\r\n \"cta\": \"Contact\"\r\n}\r\n"
30
+ "content": "{\n \"home\": \"Home\",\n \"about\": \"About\",\n \"cta\": \"Contact\"\n}\n"
31
31
  },
32
32
  {
33
33
  "path": "header-minimal/lang/tr.json",
34
34
  "type": "registry:lang",
35
35
  "target": "$modules$/header-minimal/lang/tr.json",
36
- "content": "{\r\n \"home\": \"Ana Sayfa\",\r\n \"about\": \"Hakkımızda\",\r\n \"cta\": \"İletişim\"\r\n}\r\n"
36
+ "content": "{\n \"home\": \"Ana Sayfa\",\n \"about\": \"Hakkımızda\",\n \"cta\": \"İletişim\"\n}\n"
37
37
  }
38
38
  ],
39
39
  "exports": {
@@ -13,7 +13,7 @@
13
13
  "path": "header-simple/index.ts",
14
14
  "type": "registry:index",
15
15
  "target": "$modules$/header-simple/index.ts",
16
- "content": "export * from './header-simple';\r\n"
16
+ "content": "export * from './header-simple';\n"
17
17
  },
18
18
  {
19
19
  "path": "header-simple/header-simple.tsx",
@@ -25,13 +25,13 @@
25
25
  "path": "header-simple/lang/en.json",
26
26
  "type": "registry:lang",
27
27
  "target": "$modules$/header-simple/lang/en.json",
28
- "content": "{\r\n \"home\": \"Home\",\r\n \"about\": \"About\",\r\n \"contact\": \"Contact\",\r\n \"menu\": \"Menu\"\r\n}\r\n"
28
+ "content": "{\n \"home\": \"Home\",\n \"about\": \"About\",\n \"contact\": \"Contact\",\n \"menu\": \"Menu\"\n}\n"
29
29
  },
30
30
  {
31
31
  "path": "header-simple/lang/tr.json",
32
32
  "type": "registry:lang",
33
33
  "target": "$modules$/header-simple/lang/tr.json",
34
- "content": "{\r\n \"home\": \"Ana Sayfa\",\r\n \"about\": \"Hakkımızda\",\r\n \"contact\": \"İletişim\",\r\n \"menu\": \"Menü\"\r\n}\r\n"
34
+ "content": "{\n \"home\": \"Ana Sayfa\",\n \"about\": \"Hakkımızda\",\n \"contact\": \"İletişim\",\n \"menu\": \"Menü\"\n}\n"
35
35
  }
36
36
  ],
37
37
  "exports": {
@@ -21,19 +21,19 @@
21
21
  "path": "hero-carousel/index.ts",
22
22
  "type": "registry:index",
23
23
  "target": "$modules$/hero-carousel/index.ts",
24
- "content": "export * from \"./hero-carousel\";\r\n"
24
+ "content": "export * from \"./hero-carousel\";\n"
25
25
  },
26
26
  {
27
27
  "path": "hero-carousel/lang/en.json",
28
28
  "type": "registry:lang",
29
29
  "target": "$modules$/hero-carousel/lang/en.json",
30
- "content": "{\r\n \"slides\": [\r\n {\r\n \"title\": \"Build Something Amazing\",\r\n \"description\": \"Edit these slides via Promake to match your brand message and call-to-action.\",\r\n \"primaryButton\": \"Get Started\",\r\n \"secondaryButton\": \"Learn More\"\r\n },\r\n {\r\n \"title\": \"Powerful Features\",\r\n \"description\": \"Discover tools and features that help you achieve more with less effort.\",\r\n \"primaryButton\": \"Explore Features\"\r\n },\r\n {\r\n \"title\": \"Ready to Transform?\",\r\n \"description\": \"Join thousands of satisfied customers who have already made the switch.\",\r\n \"primaryButton\": \"Contact Us\",\r\n \"secondaryButton\": \"See Demo\"\r\n }\r\n ]\r\n}\r\n"
30
+ "content": "{\n \"slides\": [\n {\n \"title\": \"Build Something Amazing\",\n \"description\": \"Edit these slides via Promake to match your brand message and call-to-action.\",\n \"primaryButton\": \"Get Started\",\n \"secondaryButton\": \"Learn More\"\n },\n {\n \"title\": \"Powerful Features\",\n \"description\": \"Discover tools and features that help you achieve more with less effort.\",\n \"primaryButton\": \"Explore Features\"\n },\n {\n \"title\": \"Ready to Transform?\",\n \"description\": \"Join thousands of satisfied customers who have already made the switch.\",\n \"primaryButton\": \"Contact Us\",\n \"secondaryButton\": \"See Demo\"\n }\n ]\n}\n"
31
31
  },
32
32
  {
33
33
  "path": "hero-carousel/lang/tr.json",
34
34
  "type": "registry:lang",
35
35
  "target": "$modules$/hero-carousel/lang/tr.json",
36
- "content": "{\r\n \"slides\": [\r\n {\r\n \"title\": \"Harika Bir Şey İnşa Edin\",\r\n \"description\": \"Bu slaytları marka mesajınıza ve eylem çağrınıza uyacak şekilde Promake üzerinden düzenleyin.\",\r\n \"primaryButton\": \"Başlayın\",\r\n \"secondaryButton\": \"Daha Fazla Bilgi\"\r\n },\r\n {\r\n \"title\": \"Güçlü Özellikler\",\r\n \"description\": \"Daha az çabayla daha fazlasını başarmanıza yardımcı olan araçları ve özellikleri keşfedin.\",\r\n \"primaryButton\": \"Özellikleri Keşfet\"\r\n },\r\n {\r\n \"title\": \"Dönüşüme Hazır mısınız?\",\r\n \"description\": \"Geçiş yapan binlerce memnun müşteriye katılın.\",\r\n \"primaryButton\": \"Bize Ulaşın\",\r\n \"secondaryButton\": \"Demo İzle\"\r\n }\r\n ]\r\n}\r\n"
36
+ "content": "{\n \"slides\": [\n {\n \"title\": \"Harika Bir Şey İnşa Edin\",\n \"description\": \"Bu slaytları marka mesajınıza ve eylem çağrınıza uyacak şekilde Promake üzerinden düzenleyin.\",\n \"primaryButton\": \"Başlayın\",\n \"secondaryButton\": \"Daha Fazla Bilgi\"\n },\n {\n \"title\": \"Güçlü Özellikler\",\n \"description\": \"Daha az çabayla daha fazlasını başarmanıza yardımcı olan araçları ve özellikleri keşfedin.\",\n \"primaryButton\": \"Özellikleri Keşfet\"\n },\n {\n \"title\": \"Dönüşüme Hazır mısınız?\",\n \"description\": \"Geçiş yapan binlerce memnun müşteriye katılın.\",\n \"primaryButton\": \"Bize Ulaşın\",\n \"secondaryButton\": \"Demo İzle\"\n }\n ]\n}\n"
37
37
  }
38
38
  ],
39
39
  "exports": {
@@ -12,25 +12,25 @@
12
12
  "path": "hero-cta/index.ts",
13
13
  "type": "registry:index",
14
14
  "target": "$modules$/hero-cta/index.ts",
15
- "content": "export * from './hero-cta';\r\n"
15
+ "content": "export * from './hero-cta';\n"
16
16
  },
17
17
  {
18
18
  "path": "hero-cta/hero-cta.tsx",
19
19
  "type": "registry:component",
20
20
  "target": "$modules$/hero-cta/hero-cta.tsx",
21
- "content": "import { Link } from \"react-router\";\r\nimport { ArrowRight, Star } from \"lucide-react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\ninterface HeroCtaProps {\r\n className?: string;\r\n}\r\n\r\nexport function HeroCta({ className }: HeroCtaProps) {\r\n const { t } = useTranslation(\"hero-cta\");\r\n\r\n const avatars = [\r\n { src: \"/images/placeholder.png\", alt: \"User 1\", fallback: \"U1\" },\r\n { src: \"/images/placeholder.png\", alt: \"User 2\", fallback: \"U2\" },\r\n { src: \"/images/placeholder.png\", alt: \"User 3\", fallback: \"U3\" },\r\n { src: \"/images/placeholder.png\", alt: \"User 4\", fallback: \"U4\" },\r\n { src: \"/images/placeholder.png\", alt: \"User 5\", fallback: \"U5\" },\r\n ];\r\n\r\n return (\r\n <section className={cn(\"py-8 md:py-12 lg:py-26\", className)}>\r\n <div className=\"w-full max-w-[var(--container-max-width)] mx-auto px-4\">\r\n <div className=\"grid items-center gap-10 lg:grid-cols-2 lg:gap-16\">\r\n {/* Content Column */}\r\n <div className=\"flex flex-col items-center text-center lg:items-start lg:text-left\">\r\n <h1 className=\"mb-6 text-2xl font-bold text-pretty sm:text-3xl lg:text-4xl xl:text-5xl leading-tight\">\r\n {t(\"heading\")}\r\n </h1>\r\n <p className=\"mb-8 max-w-xl text-muted-foreground text-base lg:text-lg\">\r\n {t(\"description\")}\r\n </p>\r\n\r\n {/* Social Proof */}\r\n <div className=\"mb-10 flex flex-col items-center gap-4 sm:flex-row lg:items-start\">\r\n <div className=\"flex -space-x-3\">\r\n {avatars.map((avatar, index) => (\r\n <Avatar key={index} className=\"h-10 w-10 border-2 border-background\">\r\n <AvatarImage src={avatar.src} alt={avatar.alt} />\r\n <AvatarFallback className=\"text-xs\">{avatar.fallback}</AvatarFallback>\r\n </Avatar>\r\n ))}\r\n </div>\r\n <div>\r\n <div className=\"flex items-center gap-1\">\r\n {[...Array(5)].map((_, index) => (\r\n <Star\r\n key={index}\r\n className=\"h-4 w-4 fill-yellow-400 text-yellow-400\"\r\n />\r\n ))}\r\n <span className=\"ml-1 font-semibold text-sm\">5.0</span>\r\n </div>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {t(\"reviews\")}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* CTA Buttons */}\r\n <div className=\"flex w-full flex-col gap-3 sm:flex-row sm:w-auto\">\r\n <Button asChild size=\"lg\" className=\"w-full sm:w-auto\">\r\n <Link to=\"/register\">\r\n {t(\"primaryCta\")}\r\n </Link>\r\n </Button>\r\n <Button asChild variant=\"outline\" size=\"lg\" className=\"w-full sm:w-auto\">\r\n <Link to=\"/about\">\r\n {t(\"secondaryCta\")}\r\n <ArrowRight className=\"ml-2 h-4 w-4\" />\r\n </Link>\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Image Column */}\r\n <div className=\"relative order-first lg:order-last\">\r\n <div className=\"aspect-[4/3] overflow-hidden rounded-2xl bg-muted\">\r\n <img\r\n src=\"/images/placeholder.png\"\r\n alt={t(\"imageAlt\")}\r\n className=\"h-full w-full object-cover\"\r\n onError={(e) => {\r\n e.currentTarget.style.display = \"none\";\r\n }}\r\n />\r\n </div>\r\n {/* Decorative gradient blur */}\r\n <div className=\"absolute -z-10 -bottom-4 -right-4 h-72 w-72 rounded-full bg-primary/20 blur-3xl\" />\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n"
21
+ "content": "import { Link } from \"react-router\";\nimport { ArrowRight, Star } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\ninterface HeroCtaProps {\n className?: string;\n}\n\nexport function HeroCta({ className }: HeroCtaProps) {\n const { t } = useTranslation(\"hero-cta\");\n\n const avatars = [\n { src: \"/images/placeholder.png\", alt: \"User 1\", fallback: \"U1\" },\n { src: \"/images/placeholder.png\", alt: \"User 2\", fallback: \"U2\" },\n { src: \"/images/placeholder.png\", alt: \"User 3\", fallback: \"U3\" },\n { src: \"/images/placeholder.png\", alt: \"User 4\", fallback: \"U4\" },\n { src: \"/images/placeholder.png\", alt: \"User 5\", fallback: \"U5\" },\n ];\n\n return (\n <section className={cn(\"py-8 md:py-12 lg:py-26\", className)}>\n <div className=\"w-full max-w-[var(--container-max-width)] mx-auto px-4\">\n <div className=\"grid items-center gap-10 lg:grid-cols-2 lg:gap-16\">\n {/* Content Column */}\n <div className=\"flex flex-col items-center text-center lg:items-start lg:text-left\">\n <h1 className=\"mb-6 text-2xl font-bold text-pretty sm:text-3xl lg:text-4xl xl:text-5xl leading-tight\">\n {t(\"heading\")}\n </h1>\n <p className=\"mb-8 max-w-xl text-muted-foreground text-base lg:text-lg\">\n {t(\"description\")}\n </p>\n\n {/* Social Proof */}\n <div className=\"mb-10 flex flex-col items-center gap-4 sm:flex-row lg:items-start\">\n <div className=\"flex -space-x-3\">\n {avatars.map((avatar, index) => (\n <Avatar key={index} className=\"h-10 w-10 border-2 border-background\">\n <AvatarImage src={avatar.src} alt={avatar.alt} />\n <AvatarFallback className=\"text-xs\">{avatar.fallback}</AvatarFallback>\n </Avatar>\n ))}\n </div>\n <div>\n <div className=\"flex items-center gap-1\">\n {[...Array(5)].map((_, index) => (\n <Star\n key={index}\n className=\"h-4 w-4 fill-yellow-400 text-yellow-400\"\n />\n ))}\n <span className=\"ml-1 font-semibold text-sm\">5.0</span>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {t(\"reviews\")}\n </p>\n </div>\n </div>\n\n {/* CTA Buttons */}\n <div className=\"flex w-full flex-col gap-3 sm:flex-row sm:w-auto\">\n <Button asChild size=\"lg\" className=\"w-full sm:w-auto\">\n <Link to=\"/register\">\n {t(\"primaryCta\")}\n </Link>\n </Button>\n <Button asChild variant=\"outline\" size=\"lg\" className=\"w-full sm:w-auto\">\n <Link to=\"/about\">\n {t(\"secondaryCta\")}\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Link>\n </Button>\n </div>\n </div>\n\n {/* Image Column */}\n <div className=\"relative order-first lg:order-last\">\n <div className=\"aspect-[4/3] overflow-hidden rounded-2xl bg-muted\">\n <img\n src=\"/images/placeholder.png\"\n alt={t(\"imageAlt\")}\n className=\"h-full w-full object-cover\"\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n </div>\n {/* Decorative gradient blur */}\n <div className=\"absolute -z-10 -bottom-4 -right-4 h-72 w-72 rounded-full bg-primary/20 blur-3xl\" />\n </div>\n </div>\n </div>\n </section>\n );\n}\n"
22
22
  },
23
23
  {
24
24
  "path": "hero-cta/lang/en.json",
25
25
  "type": "registry:lang",
26
26
  "target": "$modules$/hero-cta/lang/en.json",
27
- "content": "{\r\n \"heading\": \"Build Something Amazing Today\",\r\n \"description\": \"Create powerful solutions that help you achieve your goals faster and more efficiently.\",\r\n \"reviews\": \"Trusted by 10,000+ users worldwide\",\r\n \"primaryCta\": \"Get Started\",\r\n \"secondaryCta\": \"Learn More\",\r\n \"imageAlt\": \"Hero image\"\r\n}\r\n"
27
+ "content": "{\n \"heading\": \"Build Something Amazing Today\",\n \"description\": \"Create powerful solutions that help you achieve your goals faster and more efficiently.\",\n \"reviews\": \"Trusted by 10,000+ users worldwide\",\n \"primaryCta\": \"Get Started\",\n \"secondaryCta\": \"Learn More\",\n \"imageAlt\": \"Hero image\"\n}\n"
28
28
  },
29
29
  {
30
30
  "path": "hero-cta/lang/tr.json",
31
31
  "type": "registry:lang",
32
32
  "target": "$modules$/hero-cta/lang/tr.json",
33
- "content": "{\r\n \"heading\": \"Bugün Harika Bir Şey İnşa Edin\",\r\n \"description\": \"Hedeflerinize daha hızlı ve verimli ulaşmanıza yardımcı olan güçlü çözümler oluşturun.\",\r\n \"reviews\": \"Dünya çapında 10.000+ kullanıcı tarafından güveniliyor\",\r\n \"primaryCta\": \"Başlayın\",\r\n \"secondaryCta\": \"Daha Fazla Bilgi\",\r\n \"imageAlt\": \"Hero görseli\"\r\n}\r\n"
33
+ "content": "{\n \"heading\": \"Bugün Harika Bir Şey İnşa Edin\",\n \"description\": \"Hedeflerinize daha hızlı ve verimli ulaşmanıza yardımcı olan güçlü çözümler oluşturun.\",\n \"reviews\": \"Dünya çapında 10.000+ kullanıcı tarafından güveniliyor\",\n \"primaryCta\": \"Başlayın\",\n \"secondaryCta\": \"Daha Fazla Bilgi\",\n \"imageAlt\": \"Hero görseli\"\n}\n"
34
34
  }
35
35
  ],
36
36
  "exports": {
@@ -10,25 +10,25 @@
10
10
  "path": "hero-gradient/index.ts",
11
11
  "type": "registry:index",
12
12
  "target": "$modules$/hero-gradient/index.ts",
13
- "content": "export * from './hero-gradient';\r\n"
13
+ "content": "export * from './hero-gradient';\n"
14
14
  },
15
15
  {
16
16
  "path": "hero-gradient/hero-gradient.tsx",
17
17
  "type": "registry:component",
18
18
  "target": "$modules$/hero-gradient/hero-gradient.tsx",
19
- "content": "import { Link } from \"react-router\";\r\nimport { ArrowRight } from \"lucide-react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\ninterface HeroGradientProps {\r\n className?: string;\r\n}\r\n\r\nexport function HeroGradient({ className }: HeroGradientProps) {\r\n const { t } = useTranslation(\"hero-gradient\");\r\n\r\n return (\r\n <section\r\n className={cn(\r\n \"relative min-h-[70vh] flex items-center justify-center overflow-hidden\",\r\n className\r\n )}\r\n >\r\n {/* Gradient Background */}\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/20 via-background to-primary/10\" />\r\n\r\n {/* Animated gradient orbs */}\r\n <div className=\"absolute top-1/4 left-1/4 h-96 w-96 rounded-full bg-primary/30 blur-3xl animate-pulse\" />\r\n <div className=\"absolute bottom-1/4 right-1/4 h-80 w-80 rounded-full bg-primary/20 blur-3xl animate-pulse delay-700\" />\r\n\r\n {/* Grid pattern overlay */}\r\n <div className=\"absolute inset-0 bg-[linear-gradient(to_right,hsl(var(--border)/0.1)_1px,transparent_1px),linear-gradient(to_bottom,hsl(var(--border)/0.1)_1px,transparent_1px)] bg-[size:4rem_4rem]\" />\r\n\r\n {/* Content */}\r\n <div className=\"w-full max-w-[var(--container-max-width)] mx-auto px-4 relative z-10\">\r\n <div className=\"max-w-4xl mx-auto text-center\">\r\n {/* Badge */}\r\n <div className=\"inline-flex items-center gap-2 rounded-full border border-border/50 bg-background/50 backdrop-blur-sm px-4 py-1.5 text-sm mb-8\">\r\n <span className=\"relative flex h-2 w-2\">\r\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\r\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\r\n </span>\r\n {t(\"badge\", \"New features available\")}\r\n </div>\r\n\r\n {/* Heading */}\r\n <h1 className=\"text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-bold tracking-tight mb-6 leading-tight\">\r\n {t(\"headingLine1\", \"Transform your ideas\")}\r\n <br />\r\n <span className=\"bg-gradient-to-r from-primary to-primary/60 bg-clip-text text-transparent\">\r\n {t(\"headingLine2\", \"into reality\")}\r\n </span>\r\n </h1>\r\n\r\n {/* Description */}\r\n <p className=\"text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto mb-10\">\r\n {t(\"description\", \"A powerful platform that helps you build, deploy, and scale your applications with ease. Start your journey today.\")}\r\n </p>\r\n\r\n {/* CTA Buttons */}\r\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\r\n <Button asChild size=\"lg\" className=\"text-base px-8\">\r\n <Link to=\"/register\">\r\n {t(\"primaryCta\", \"Start Building\")}\r\n <ArrowRight className=\"ml-2 h-4 w-4\" />\r\n </Link>\r\n </Button>\r\n <Button asChild variant=\"outline\" size=\"lg\" className=\"text-base px-8\">\r\n <Link to=\"/contact\">\r\n {t(\"secondaryCta\", \"Contact Sales\")}\r\n </Link>\r\n </Button>\r\n </div>\r\n\r\n {/* Trust badges */}\r\n <div className=\"mt-12 flex flex-wrap items-center justify-center gap-8 text-muted-foreground\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-2xl font-bold text-foreground\">10K+</span>\r\n <span className=\"text-sm\">{t(\"users\", \"Active Users\")}</span>\r\n </div>\r\n <div className=\"h-8 w-px bg-border hidden sm:block\" />\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-2xl font-bold text-foreground\">99.9%</span>\r\n <span className=\"text-sm\">{t(\"uptime\", \"Uptime\")}</span>\r\n </div>\r\n <div className=\"h-8 w-px bg-border hidden sm:block\" />\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-2xl font-bold text-foreground\">24/7</span>\r\n <span className=\"text-sm\">{t(\"support\", \"Support\")}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n"
19
+ "content": "import { Link } from \"react-router\";\nimport { ArrowRight } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\ninterface HeroGradientProps {\n className?: string;\n}\n\nexport function HeroGradient({ className }: HeroGradientProps) {\n const { t } = useTranslation(\"hero-gradient\");\n\n return (\n <section\n className={cn(\n \"relative min-h-[70vh] flex items-center justify-center overflow-hidden\",\n className\n )}\n >\n {/* Gradient Background */}\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/20 via-background to-primary/10\" />\n\n {/* Animated gradient orbs */}\n <div className=\"absolute top-1/4 left-1/4 h-96 w-96 rounded-full bg-primary/30 blur-3xl animate-pulse\" />\n <div className=\"absolute bottom-1/4 right-1/4 h-80 w-80 rounded-full bg-primary/20 blur-3xl animate-pulse delay-700\" />\n\n {/* Grid pattern overlay */}\n <div className=\"absolute inset-0 bg-[linear-gradient(to_right,hsl(var(--border)/0.1)_1px,transparent_1px),linear-gradient(to_bottom,hsl(var(--border)/0.1)_1px,transparent_1px)] bg-[size:4rem_4rem]\" />\n\n {/* Content */}\n <div className=\"w-full max-w-[var(--container-max-width)] mx-auto px-4 relative z-10\">\n <div className=\"max-w-4xl mx-auto text-center\">\n {/* Badge */}\n <div className=\"inline-flex items-center gap-2 rounded-full border border-border/50 bg-background/50 backdrop-blur-sm px-4 py-1.5 text-sm mb-8\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n {t(\"badge\", \"New features available\")}\n </div>\n\n {/* Heading */}\n <h1 className=\"text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-bold tracking-tight mb-6 leading-tight\">\n {t(\"headingLine1\", \"Transform your ideas\")}\n <br />\n <span className=\"bg-gradient-to-r from-primary to-primary/60 bg-clip-text text-transparent\">\n {t(\"headingLine2\", \"into reality\")}\n </span>\n </h1>\n\n {/* Description */}\n <p className=\"text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto mb-10\">\n {t(\"description\", \"A powerful platform that helps you build, deploy, and scale your applications with ease. Start your journey today.\")}\n </p>\n\n {/* CTA Buttons */}\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\n <Button asChild size=\"lg\" className=\"text-base px-8\">\n <Link to=\"/register\">\n {t(\"primaryCta\", \"Start Building\")}\n <ArrowRight className=\"ml-2 h-4 w-4\" />\n </Link>\n </Button>\n <Button asChild variant=\"outline\" size=\"lg\" className=\"text-base px-8\">\n <Link to=\"/contact\">\n {t(\"secondaryCta\", \"Contact Sales\")}\n </Link>\n </Button>\n </div>\n\n {/* Trust badges */}\n <div className=\"mt-12 flex flex-wrap items-center justify-center gap-8 text-muted-foreground\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-2xl font-bold text-foreground\">10K+</span>\n <span className=\"text-sm\">{t(\"users\", \"Active Users\")}</span>\n </div>\n <div className=\"h-8 w-px bg-border hidden sm:block\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-2xl font-bold text-foreground\">99.9%</span>\n <span className=\"text-sm\">{t(\"uptime\", \"Uptime\")}</span>\n </div>\n <div className=\"h-8 w-px bg-border hidden sm:block\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-2xl font-bold text-foreground\">24/7</span>\n <span className=\"text-sm\">{t(\"support\", \"Support\")}</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n}\n"
20
20
  },
21
21
  {
22
22
  "path": "hero-gradient/lang/en.json",
23
23
  "type": "registry:lang",
24
24
  "target": "$modules$/hero-gradient/lang/en.json",
25
- "content": "{\r\n \"badge\": \"New Feature Available\",\r\n \"headingLine1\": \"Build Something Amazing\",\r\n \"headingLine2\": \"with your site headline\",\r\n \"description\": \"Create powerful solutions that drive results for your business.\",\r\n \"primaryCta\": \"Get Started\",\r\n \"secondaryCta\": \"Contact Sales\",\r\n \"users\": \"Active Users\",\r\n \"uptime\": \"Uptime\",\r\n \"support\": \"Support\"\r\n}\r\n"
25
+ "content": "{\n \"badge\": \"New Feature Available\",\n \"headingLine1\": \"Build Something Amazing\",\n \"headingLine2\": \"with your site headline\",\n \"description\": \"Create powerful solutions that drive results for your business.\",\n \"primaryCta\": \"Get Started\",\n \"secondaryCta\": \"Contact Sales\",\n \"users\": \"Active Users\",\n \"uptime\": \"Uptime\",\n \"support\": \"Support\"\n}\n"
26
26
  },
27
27
  {
28
28
  "path": "hero-gradient/lang/tr.json",
29
29
  "type": "registry:lang",
30
30
  "target": "$modules$/hero-gradient/lang/tr.json",
31
- "content": "{\r\n \"badge\": \"Yeni Özellik Mevcut\",\r\n \"headingLine1\": \"Harika Bir Şey İnşa Edin\",\r\n \"headingLine2\": \"site başlığınızla güncellemesini isteyin\",\r\n \"description\": \"İşiniz için sonuç odaklı güçlü çözümler oluşturun.\",\r\n \"primaryCta\": \"Başlayın\",\r\n \"secondaryCta\": \"Satış ile İletişim\",\r\n \"users\": \"Aktif Kullanıcı\",\r\n \"uptime\": \"Çalışma Süresi\",\r\n \"support\": \"Destek\"\r\n}\r\n"
31
+ "content": "{\n \"badge\": \"Yeni Özellik Mevcut\",\n \"headingLine1\": \"Harika Bir Şey İnşa Edin\",\n \"headingLine2\": \"site başlığınızla güncellemesini isteyin\",\n \"description\": \"İşiniz için sonuç odaklı güçlü çözümler oluşturun.\",\n \"primaryCta\": \"Başlayın\",\n \"secondaryCta\": \"Satış ile İletişim\",\n \"users\": \"Aktif Kullanıcı\",\n \"uptime\": \"Çalışma Süresi\",\n \"support\": \"Destek\"\n}\n"
32
32
  }
33
33
  ],
34
34
  "exports": {
@@ -12,25 +12,25 @@
12
12
  "path": "hero-grid/index.ts",
13
13
  "type": "registry:index",
14
14
  "target": "$modules$/hero-grid/index.ts",
15
- "content": "export * from './hero-grid';\r\n"
15
+ "content": "export * from './hero-grid';\n"
16
16
  },
17
17
  {
18
18
  "path": "hero-grid/hero-grid.tsx",
19
19
  "type": "registry:component",
20
20
  "target": "$modules$/hero-grid/hero-grid.tsx",
21
- "content": "import { Link } from \"react-router\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface HeroGridProps {\r\n images?: string[];\r\n ctaHref?: string;\r\n className?: string;\r\n}\r\n\r\nexport function HeroGrid({\r\n images = [\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n \"/images/placeholder.png\",\r\n ],\r\n ctaHref = \"/products\",\r\n className,\r\n}: HeroGridProps) {\r\n const { t } = useTranslation(\"hero-grid\");\r\n\r\n return (\r\n <div className={cn(\"relative overflow-hidden bg-background\", className)}>\r\n <div className=\"pt-16 pb-80 sm:pt-24 sm:pb-40 lg:pt-40 lg:pb-48\">\r\n <div className=\"relative mx-auto max-w-7xl px-4 sm:static sm:px-6 lg:px-8\">\r\n <div className=\"sm:max-w-lg\">\r\n <h1 className=\"text-4xl font-bold tracking-tight sm:text-6xl\">\r\n {t(\"title\", \"Discover Our Latest Collection\")}\r\n </h1>\r\n <p className=\"mt-4 text-xl text-muted-foreground\">\r\n {t(\"description\", \"Explore our curated selection of premium products designed to elevate your everyday experience.\")}\r\n </p>\r\n </div>\r\n <div>\r\n <div className=\"mt-10\">\r\n {/* Decorative image grid */}\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"pointer-events-none lg:absolute lg:inset-y-0 lg:mx-auto lg:w-full lg:max-w-7xl\"\r\n >\r\n <div className=\"absolute transform sm:top-0 sm:left-1/2 sm:translate-x-8 lg:top-1/2 lg:left-1/2 lg:translate-x-8 lg:-translate-y-1/2\">\r\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\r\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg sm:opacity-0 lg:opacity-100\">\r\n <img\r\n alt=\"\"\r\n src={images[0]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[1]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n </div>\r\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[2]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[3]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[4]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n </div>\r\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[5]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\r\n <img\r\n alt=\"\"\r\n src={images[6]}\r\n className=\"size-full object-cover\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Button asChild size=\"lg\">\r\n <Link to={ctaHref}>\r\n {t(\"cta\", \"Shop Collection\")}\r\n </Link>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"
21
+ "content": "import { Link } from \"react-router\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface HeroGridProps {\n images?: string[];\n ctaHref?: string;\n className?: string;\n}\n\nexport function HeroGrid({\n images = [\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n \"/images/placeholder.png\",\n ],\n ctaHref = \"/products\",\n className,\n}: HeroGridProps) {\n const { t } = useTranslation(\"hero-grid\");\n\n return (\n <div className={cn(\"relative overflow-hidden bg-background\", className)}>\n <div className=\"pt-16 pb-80 sm:pt-24 sm:pb-40 lg:pt-40 lg:pb-48\">\n <div className=\"relative mx-auto max-w-7xl px-4 sm:static sm:px-6 lg:px-8\">\n <div className=\"sm:max-w-lg\">\n <h1 className=\"text-4xl font-bold tracking-tight sm:text-6xl\">\n {t(\"title\", \"Discover Our Latest Collection\")}\n </h1>\n <p className=\"mt-4 text-xl text-muted-foreground\">\n {t(\"description\", \"Explore our curated selection of premium products designed to elevate your everyday experience.\")}\n </p>\n </div>\n <div>\n <div className=\"mt-10\">\n {/* Decorative image grid */}\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none lg:absolute lg:inset-y-0 lg:mx-auto lg:w-full lg:max-w-7xl\"\n >\n <div className=\"absolute transform sm:top-0 sm:left-1/2 sm:translate-x-8 lg:top-1/2 lg:left-1/2 lg:translate-x-8 lg:-translate-y-1/2\">\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\n <div className=\"h-64 w-44 overflow-hidden rounded-lg sm:opacity-0 lg:opacity-100\">\n <img\n alt=\"\"\n src={images[0]}\n className=\"size-full object-cover\"\n />\n </div>\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[1]}\n className=\"size-full object-cover\"\n />\n </div>\n </div>\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[2]}\n className=\"size-full object-cover\"\n />\n </div>\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[3]}\n className=\"size-full object-cover\"\n />\n </div>\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[4]}\n className=\"size-full object-cover\"\n />\n </div>\n </div>\n <div className=\"grid shrink-0 grid-cols-1 gap-y-6 lg:gap-y-8\">\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[5]}\n className=\"size-full object-cover\"\n />\n </div>\n <div className=\"h-64 w-44 overflow-hidden rounded-lg\">\n <img\n alt=\"\"\n src={images[6]}\n className=\"size-full object-cover\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <Button asChild size=\"lg\">\n <Link to={ctaHref}>\n {t(\"cta\", \"Shop Collection\")}\n </Link>\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"
22
22
  },
23
23
  {
24
24
  "path": "hero-grid/lang/en.json",
25
25
  "type": "registry:lang",
26
26
  "target": "$modules$/hero-grid/lang/en.json",
27
- "content": "{\r\n \"title\": \"Discover What We Offer\",\r\n \"description\": \"Explore our curated selection of offerings designed to elevate your experience and help you achieve your goals.\",\r\n \"cta\": \"Explore Now\"\r\n}\r\n"
27
+ "content": "{\n \"title\": \"Discover What We Offer\",\n \"description\": \"Explore our curated selection of offerings designed to elevate your experience and help you achieve your goals.\",\n \"cta\": \"Explore Now\"\n}\n"
28
28
  },
29
29
  {
30
30
  "path": "hero-grid/lang/tr.json",
31
31
  "type": "registry:lang",
32
32
  "target": "$modules$/hero-grid/lang/tr.json",
33
- "content": "{\r\n \"title\": \"Neler Sunduğumuzu Keşfedin\",\r\n \"description\": \"Deneyiminizi zenginleştirmek ve hedeflerinize ulaşmanıza yardımcı olmak için tasarlanmış özenle seçilmiş tekliflerimizi keşfedin.\",\r\n \"cta\": \"Keşfet\"\r\n}\r\n"
33
+ "content": "{\n \"title\": \"Neler Sunduğumuzu Keşfedin\",\n \"description\": \"Deneyiminizi zenginleştirmek ve hedeflerinize ulaşmanıza yardımcı olmak için tasarlanmış özenle seçilmiş tekliflerimizi keşfedin.\",\n \"cta\": \"Keşfet\"\n}\n"
34
34
  }
35
35
  ],
36
36
  "exports": {
@@ -13,7 +13,7 @@
13
13
  "path": "hero-profile/index.ts",
14
14
  "type": "registry:index",
15
15
  "target": "$modules$/hero-profile/index.ts",
16
- "content": "export * from './hero-profile';\r\n"
16
+ "content": "export * from './hero-profile';\n"
17
17
  },
18
18
  {
19
19
  "path": "hero-profile/hero-profile.tsx",
@@ -25,13 +25,13 @@
25
25
  "path": "hero-profile/lang/en.json",
26
26
  "type": "registry:lang",
27
27
  "target": "$modules$/hero-profile/lang/en.json",
28
- "content": "{\r\n \"name\": \"Your Name\",\r\n \"bio\": \"Your professional title and location\",\r\n \"greeting\": \"Hello There!\",\r\n \"intro\": \"Your introduction and what you do\",\r\n \"freelancing\": \"Available for Freelancing\",\r\n \"companiesTitle\": \"Teams I've Worked With\"\r\n}\r\n"
28
+ "content": "{\n \"name\": \"Your Name\",\n \"bio\": \"Your professional title and location\",\n \"greeting\": \"Hello There!\",\n \"intro\": \"Your introduction and what you do\",\n \"freelancing\": \"Available for Freelancing\",\n \"companiesTitle\": \"Teams I've Worked With\"\n}\n"
29
29
  },
30
30
  {
31
31
  "path": "hero-profile/lang/tr.json",
32
32
  "type": "registry:lang",
33
33
  "target": "$modules$/hero-profile/lang/tr.json",
34
- "content": "{\r\n \"name\": \"Adınız\",\r\n \"bio\": \"Mesleğiniz ve konumunuz\",\r\n \"greeting\": \"Merhaba!\",\r\n \"intro\": \"Tanıtımınız ve ne yaptığınız\",\r\n \"freelancing\": \"Freelance İçin Müsait\",\r\n \"companiesTitle\": \"Çalıştığım Ekipler\"\r\n}\r\n"
34
+ "content": "{\n \"name\": \"Adınız\",\n \"bio\": \"Mesleğiniz ve konumunuz\",\n \"greeting\": \"Merhaba!\",\n \"intro\": \"Tanıtımınız ve ne yaptığınız\",\n \"freelancing\": \"Freelance İçin Müsait\",\n \"companiesTitle\": \"Çalıştığım Ekipler\"\n}\n"
35
35
  }
36
36
  ],
37
37
  "tailwind": {
@@ -10,7 +10,7 @@
10
10
  "path": "hero/index.ts",
11
11
  "type": "registry:index",
12
12
  "target": "$modules$/hero/index.ts",
13
- "content": "export * from './hero';\r\n"
13
+ "content": "export * from './hero';\n"
14
14
  },
15
15
  {
16
16
  "path": "hero/hero.tsx",
@@ -22,13 +22,13 @@
22
22
  "path": "hero/lang/en.json",
23
23
  "type": "registry:lang",
24
24
  "target": "$modules$/hero/lang/en.json",
25
- "content": "{\r\n \"discover\": \"Discover\",\r\n \"amazing\": \"Inspiring\",\r\n \"content\": \"Stories\",\r\n \"subtitle\": \"Explore inspiring stories and meaningful content.\",\r\n \"readLatest\": \"Start Reading\",\r\n \"exploreTopics\": \"Explore Topics\"\r\n}\r\n"
25
+ "content": "{\n \"discover\": \"Discover\",\n \"amazing\": \"Inspiring\",\n \"content\": \"Stories\",\n \"subtitle\": \"Explore inspiring stories and meaningful content.\",\n \"readLatest\": \"Start Reading\",\n \"exploreTopics\": \"Explore Topics\"\n}\n"
26
26
  },
27
27
  {
28
28
  "path": "hero/lang/tr.json",
29
29
  "type": "registry:lang",
30
30
  "target": "$modules$/hero/lang/tr.json",
31
- "content": "{\r\n \"discover\": \"Keşfedin\",\r\n \"amazing\": \"İlham Verici\",\r\n \"content\": \"Hikayeler\",\r\n \"subtitle\": \"İlham verici hikayeleri ve anlamlı içerikleri keşfedin.\",\r\n \"readLatest\": \"Okumaya Başlayın\",\r\n \"exploreTopics\": \"Konuları Keşfedin\"\r\n}\r\n"
31
+ "content": "{\n \"discover\": \"Keşfedin\",\n \"amazing\": \"İlham Verici\",\n \"content\": \"Hikayeler\",\n \"subtitle\": \"İlham verici hikayeleri ve anlamlı içerikleri keşfedin.\",\n \"readLatest\": \"Okumaya Başlayın\",\n \"exploreTopics\": \"Konuları Keşfedin\"\n}\n"
32
32
  }
33
33
  ],
34
34
  "exports": {