astro-component-kit 0.4.0 → 0.5.0

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 (208) hide show
  1. package/README.md +139 -27
  2. package/bin/cli.js +67 -0
  3. package/bin/installer.js +179 -0
  4. package/package.json +35 -5
  5. package/src/components/index.ts +2 -0
  6. package/src/components/lib/Galaxy3D.astro +249 -137
  7. package/src/components/lib/app/AppSidebar.astro +249 -0
  8. package/src/components/lib/app/AppTopbar.astro +284 -0
  9. package/src/components/lib/app/ArrivalsBoard.astro +176 -0
  10. package/src/components/lib/app/AuthCard.astro +213 -0
  11. package/src/components/lib/app/DataTable.astro +346 -0
  12. package/src/components/lib/app/GuestProfileCard.astro +133 -0
  13. package/src/components/lib/app/HousekeepingBoard.astro +189 -0
  14. package/src/components/lib/app/PageHeader.astro +157 -0
  15. package/src/components/lib/app/PlanUsageCard.astro +112 -0
  16. package/src/components/lib/app/RoomRack.astro +207 -0
  17. package/src/components/lib/app/SettingsSection.astro +96 -0
  18. package/src/components/lib/app/SwitchRow.astro +71 -0
  19. package/src/components/lib/app/TeamMembers.astro +190 -0
  20. package/src/components/lib/app/app-icons.ts +52 -0
  21. package/src/components/lib/app/index.ts +19 -0
  22. package/src/components/lib/charts/AreaChart.astro +4 -4
  23. package/src/components/lib/charts/BarChart.astro +3 -3
  24. package/src/components/lib/charts/ChartFrame.astro +10 -10
  25. package/src/components/lib/charts/DonutChart.astro +2 -2
  26. package/src/components/lib/charts/DumbbellChart.astro +1 -1
  27. package/src/components/lib/charts/ForecastLineChart.astro +1 -1
  28. package/src/components/lib/charts/GaugeChart.astro +1 -1
  29. package/src/components/lib/charts/HeatmapChart.astro +1 -1
  30. package/src/components/lib/charts/HorizontalBarChart.astro +2 -2
  31. package/src/components/lib/charts/KpiStatTile.astro +4 -4
  32. package/src/components/lib/charts/LinearProgressGauge.astro +4 -4
  33. package/src/components/lib/charts/MetricDeltaTable.astro +3 -3
  34. package/src/components/lib/charts/RadarMetricChart.astro +4 -4
  35. package/src/components/lib/charts/RadialBarChart.astro +1 -1
  36. package/src/components/lib/charts/RetentionCohortTable.astro +2 -2
  37. package/src/components/lib/charts/TreemapChart.astro +1 -1
  38. package/src/components/lib/ecommerce/CartDrawer.astro +483 -0
  39. package/src/components/lib/ecommerce/CartPageList.astro +290 -0
  40. package/src/components/lib/ecommerce/CartToast.astro +276 -0
  41. package/src/components/lib/ecommerce/CategoryTiles.astro +143 -0
  42. package/src/components/lib/ecommerce/CheckoutForm.astro +423 -0
  43. package/src/components/lib/ecommerce/CountdownBanner.astro +230 -0
  44. package/src/components/lib/ecommerce/FilterBar.astro +278 -0
  45. package/src/components/lib/ecommerce/FilterSidebar.astro +405 -0
  46. package/src/components/lib/ecommerce/LiveActivityToast.astro +213 -0
  47. package/src/components/lib/ecommerce/OrderSummary.astro +295 -0
  48. package/src/components/lib/ecommerce/ProductBuyBox.astro +247 -0
  49. package/src/components/lib/ecommerce/ProductCardMinimal.astro +229 -0
  50. package/src/components/lib/ecommerce/ProductGallery.astro +145 -0
  51. package/src/components/lib/ecommerce/ProductGrid.astro +118 -0
  52. package/src/components/lib/ecommerce/ProductMedia.astro +113 -0
  53. package/src/components/lib/ecommerce/ProductRating.astro +78 -0
  54. package/src/components/lib/ecommerce/ProductToolbar.astro +93 -0
  55. package/src/components/lib/ecommerce/PromoBar.astro +145 -0
  56. package/src/components/lib/ecommerce/StockIndicator.astro +127 -0
  57. package/src/components/lib/ecommerce/StoreHeader.astro +446 -0
  58. package/src/components/lib/ecommerce/StoreHero.astro +260 -0
  59. package/src/components/lib/ecommerce/StoreProductCard.astro +307 -0
  60. package/src/components/lib/ecommerce/TrustBadges.astro +101 -0
  61. package/src/components/lib/ecommerce/VariantPicker.astro +145 -0
  62. package/src/components/lib/ecommerce/cart-store.ts +151 -0
  63. package/src/components/lib/ecommerce/catalog-filter.ts +62 -0
  64. package/src/components/lib/ecommerce/index.ts +34 -0
  65. package/src/components/lib/ecommerce/product-icons.ts +28 -0
  66. package/src/components/lib/ecommerce/types.ts +70 -0
  67. package/src/components/lib/forms/AnimatedInput.astro +4 -2
  68. package/src/components/lib/forms/CustomRadioGroup.astro +3 -1
  69. package/src/components/lib/index.ts +2 -0
  70. package/src/components/lib/layout/BentoGrid3.astro +6 -4
  71. package/src/components/lib/layout/CenterFixedBox.astro +2 -2
  72. package/src/components/lib/layout/CenteredContainer.astro +4 -2
  73. package/src/components/lib/layout/ClusterHorizontal.astro +2 -2
  74. package/src/components/lib/layout/FeatureHero.astro +4 -2
  75. package/src/components/lib/layout/FooterCenteredMinimal.astro +4 -2
  76. package/src/components/lib/layout/FullBleedSection.astro +2 -2
  77. package/src/components/lib/layout/GalleryGrid4.astro +2 -2
  78. package/src/components/lib/layout/HolyGrailGrid.astro +11 -9
  79. package/src/components/lib/layout/LandingSectionSplit.astro +5 -3
  80. package/src/components/lib/layout/MasonryGrid.astro +2 -2
  81. package/src/components/lib/layout/MinimalFooterGrid.astro +1 -1
  82. package/src/components/lib/layout/ScrollSnapSection.astro +1 -1
  83. package/src/components/lib/layout/SidebarLayoutWrapper.astro +4 -2
  84. package/src/components/lib/layout/SplitScreenLayout.astro +3 -3
  85. package/src/components/lib/layout/StepLayoutVertical.astro +1 -1
  86. package/src/components/lib/layout/StickySidebarWrapper.astro +4 -2
  87. package/src/components/lib/sections/AgencyContactBrief.astro +194 -0
  88. package/src/components/lib/sections/AgencyFooterCta.astro +94 -0
  89. package/src/components/lib/sections/AgencyHeader.astro +161 -0
  90. package/src/components/lib/sections/AgencyHeroKinetic.astro +172 -0
  91. package/src/components/lib/sections/AgencyServicesList.astro +113 -0
  92. package/src/components/lib/sections/AgencyTeamGrid.astro +111 -0
  93. package/src/components/lib/sections/AgencyWorkGrid.astro +147 -0
  94. package/src/components/lib/sections/BlogGridSection.astro +9 -7
  95. package/src/components/lib/sections/ButtonsShowcase.astro +20 -18
  96. package/src/components/lib/sections/CardsShowcase.astro +28 -26
  97. package/src/components/lib/sections/CareersOpenings.astro +10 -8
  98. package/src/components/lib/sections/ChangelogSection.astro +20 -7
  99. package/src/components/lib/sections/ContactGlassForm.astro +10 -8
  100. package/src/components/lib/sections/ContactSplitMap.astro +11 -9
  101. package/src/components/lib/sections/CtaAppDownload.astro +13 -11
  102. package/src/components/lib/sections/CtaGlowBanner.astro +12 -10
  103. package/src/components/lib/sections/CtaNewsletterSection.astro +13 -11
  104. package/src/components/lib/sections/CtaSplitImage.astro +13 -11
  105. package/src/components/lib/sections/DataShowcase.astro +23 -21
  106. package/src/components/lib/sections/FaqAccordionSection.astro +8 -8
  107. package/src/components/lib/sections/FaqTwoColumn.astro +9 -7
  108. package/src/components/lib/sections/FeatureAlternatingRows.astro +10 -8
  109. package/src/components/lib/sections/FeatureBentoGrid.astro +13 -11
  110. package/src/components/lib/sections/FeatureIconGrid.astro +6 -6
  111. package/src/components/lib/sections/FeatureTabsShowcase.astro +13 -11
  112. package/src/components/lib/sections/FeatureTimelineFlow.astro +8 -6
  113. package/src/components/lib/sections/FeedbackShowcase.astro +15 -13
  114. package/src/components/lib/sections/FooterMegaSection.astro +13 -11
  115. package/src/components/lib/sections/FormsShowcase.astro +22 -20
  116. package/src/components/lib/sections/HeroDashboardPreview.astro +11 -9
  117. package/src/components/lib/sections/HeroGlass.astro +22 -20
  118. package/src/components/lib/sections/HeroGradient.astro +15 -13
  119. package/src/components/lib/sections/HeroMinimalCentered.astro +10 -10
  120. package/src/components/lib/sections/HeroShowcaseSplit.astro +18 -16
  121. package/src/components/lib/sections/HeroSplit.astro +13 -11
  122. package/src/components/lib/sections/HeroTerminal.astro +14 -12
  123. package/src/components/lib/sections/HeroWaitlist.astro +10 -8
  124. package/src/components/lib/sections/HowItWorksSteps.astro +12 -10
  125. package/src/components/lib/sections/IntegrationsGrid.astro +7 -7
  126. package/src/components/lib/sections/LayoutShowcase.astro +21 -19
  127. package/src/components/lib/sections/LogoCloudSection.astro +4 -4
  128. package/src/components/lib/sections/LogoWallGrid.astro +6 -4
  129. package/src/components/lib/sections/NavigationShowcase.astro +15 -13
  130. package/src/components/lib/sections/OverlaysShowcase.astro +21 -19
  131. package/src/components/lib/sections/PricingComparisonMatrix.astro +15 -13
  132. package/src/components/lib/sections/PricingSinglePlan.astro +13 -11
  133. package/src/components/lib/sections/PricingTierCards.astro +11 -9
  134. package/src/components/lib/sections/PricingToggleCards.astro +13 -13
  135. package/src/components/lib/sections/ShopCategoryHero.astro +103 -0
  136. package/src/components/lib/sections/ShopCollectionMosaic.astro +131 -0
  137. package/src/components/lib/sections/ShopFooterWordmark.astro +100 -0
  138. package/src/components/lib/sections/ShopHeaderEditorial.astro +396 -0
  139. package/src/components/lib/sections/ShopHeroEditorial.astro +151 -0
  140. package/src/components/lib/sections/ShopLookbook.astro +250 -0
  141. package/src/components/lib/sections/ShopNewsletterEditorial.astro +128 -0
  142. package/src/components/lib/sections/ShopProductRail.astro +150 -0
  143. package/src/components/lib/sections/ShopReviewsEditorial.astro +133 -0
  144. package/src/components/lib/sections/ShopValuesMarquee.astro +91 -0
  145. package/src/components/lib/sections/StatsCounterBand.astro +9 -7
  146. package/src/components/lib/sections/StatsDashboardSection.astro +4 -2
  147. package/src/components/lib/sections/StatsMetricShowcase.astro +9 -7
  148. package/src/components/lib/sections/TeamGridSection.astro +12 -10
  149. package/src/components/lib/sections/TestimonialCarousel.astro +10 -8
  150. package/src/components/lib/sections/TestimonialFeatured.astro +7 -5
  151. package/src/components/lib/sections/TestimonialGridSection.astro +7 -7
  152. package/src/components/lib/sections/TestimonialWallGlass.astro +11 -9
  153. package/src/components/lib/sections/TypographyShowcase.astro +10 -8
  154. package/src/components/lib/sections/index.ts +10 -0
  155. package/src/components/lib/templates/ecommerce/StoreCategoryPage.astro +160 -0
  156. package/src/components/lib/templates/ecommerce/StoreCheckoutPage.astro +98 -0
  157. package/src/components/lib/templates/ecommerce/StoreHomePage.astro +191 -0
  158. package/src/components/lib/templates/ecommerce/StoreLayout.astro +169 -0
  159. package/src/components/lib/templates/ecommerce/StoreProductPage.astro +165 -0
  160. package/src/components/lib/templates/ecommerce/data.ts +187 -0
  161. package/src/components/lib/templates/ecommerce/index.ts +14 -0
  162. package/src/components/lib/templates/ecommerce-editorial/EditorialBagPage.astro +52 -0
  163. package/src/components/lib/templates/ecommerce-editorial/EditorialCheckoutPage.astro +123 -0
  164. package/src/components/lib/templates/ecommerce-editorial/EditorialHomePage.astro +102 -0
  165. package/src/components/lib/templates/ecommerce-editorial/EditorialLayout.astro +216 -0
  166. package/src/components/lib/templates/ecommerce-editorial/EditorialProductPage.astro +205 -0
  167. package/src/components/lib/templates/ecommerce-editorial/EditorialShopPage.astro +112 -0
  168. package/src/components/lib/templates/ecommerce-editorial/data.ts +125 -0
  169. package/src/components/lib/templates/ecommerce-editorial/index.ts +16 -0
  170. package/src/components/lib/templates/saas-hotel/AppLayout.astro +83 -0
  171. package/src/components/lib/templates/saas-hotel/DashboardPage.astro +66 -0
  172. package/src/components/lib/templates/saas-hotel/GuestsPage.astro +65 -0
  173. package/src/components/lib/templates/saas-hotel/LandingPage.astro +213 -0
  174. package/src/components/lib/templates/saas-hotel/ReportsPage.astro +63 -0
  175. package/src/components/lib/templates/saas-hotel/ReservationsPage.astro +49 -0
  176. package/src/components/lib/templates/saas-hotel/RoomsPage.astro +48 -0
  177. package/src/components/lib/templates/saas-hotel/SettingsPage.astro +115 -0
  178. package/src/components/lib/templates/saas-hotel/SignInPage.astro +50 -0
  179. package/src/components/lib/templates/saas-hotel/data.ts +229 -0
  180. package/src/components/lib/templates/saas-hotel/index.ts +19 -0
  181. package/src/components/lib/templates/saas-hotel/lobby-theme.css +90 -0
  182. package/src/data/registry/app.ts +93 -0
  183. package/src/data/registry/buttons.ts +3279 -0
  184. package/src/data/registry/cards.ts +1753 -0
  185. package/src/data/registry/charts-svg.ts +557 -0
  186. package/src/data/registry/charts.ts +500 -0
  187. package/src/data/registry/data.ts +986 -0
  188. package/src/data/registry/ecommerce.ts +269 -0
  189. package/src/data/registry/feedback.ts +1824 -0
  190. package/src/data/registry/forms.ts +2513 -0
  191. package/src/data/registry/index.ts +64 -0
  192. package/src/data/registry/layout.ts +206 -0
  193. package/src/data/registry/navigation.ts +936 -0
  194. package/src/data/registry/overlays.ts +1133 -0
  195. package/src/data/registry/sections-extra.ts +397 -0
  196. package/src/data/registry/sections.ts +361 -0
  197. package/src/data/registry/sources.ts +41 -0
  198. package/src/data/registry/templates.ts +414 -0
  199. package/src/data/registry/types.ts +30 -0
  200. package/src/data/registry/typography.ts +777 -0
  201. package/src/mcp/http-server.ts +324 -0
  202. package/src/mcp/index.ts +67 -0
  203. package/src/mcp/installer.ts +178 -0
  204. package/src/mcp/registry-adapter.ts +278 -0
  205. package/src/mcp/stdio-server.ts +11 -0
  206. package/src/mcp/tools.ts +247 -0
  207. package/src/mcp/types.ts +53 -0
  208. package/src/styles/global.css +95 -0
@@ -0,0 +1,414 @@
1
+ // src/data/registry/templates.ts
2
+ // Complete multi-page templates built from library components.
3
+ import type { Locale } from '../../config/site';
4
+
5
+ export interface TemplatePage {
6
+ id: string;
7
+ /** Path relative to the template preview base ('' = home). */
8
+ path: string;
9
+ name: Record<Locale, string>;
10
+ description: Record<Locale, string>;
11
+ /** Astro file the user creates for this page. */
12
+ file: string;
13
+ code: string;
14
+ }
15
+
16
+ export interface TemplateDoc {
17
+ slug: string;
18
+ name: Record<Locale, string>;
19
+ tagline: Record<Locale, string>;
20
+ description: Record<Locale, string>;
21
+ highlights: Record<Locale, string[]>;
22
+ tags: string[];
23
+ /** Where the live preview lives on this site. */
24
+ previewBase: string;
25
+ importPath: string;
26
+ pages: TemplatePage[];
27
+ /** Components created for this template (registry slugs). */
28
+ newComponents: string[];
29
+ /** Existing library components reused by the template (registry slugs). */
30
+ reusedComponents: string[];
31
+ storeConfigExample: string;
32
+ }
33
+
34
+ const IMPORT = 'astro-component-kit/templates/ecommerce';
35
+
36
+ export const templates: TemplateDoc[] = [
37
+ {
38
+ slug: 'ecommerce',
39
+ name: { en: 'E-commerce Store', es: 'Tienda e-commerce', ru: 'Интернет-магазин' },
40
+ tagline: {
41
+ en: 'A complete, accessible online store: home, catalogue, product page, cart and checkout.',
42
+ es: 'Una tienda online completa y accesible: home, catálogo, ficha de producto, carrito y checkout.',
43
+ ru: 'Полноценный доступный интернет-магазин: главная, каталог, карточка товара, корзина и оформление заказа.',
44
+ },
45
+ description: {
46
+ en: 'Nova Store is a production-ready e-commerce template for Astro. Five pages share one cart that persists in the browser, the catalogue filters instantly without a backend, and the checkout validates, totals shipping, tax and promo codes and confirms the order. Every block is a library component, so you can use the whole store or just the pieces you need.',
47
+ es: 'Nova Store es una plantilla e-commerce lista para producción en Astro. Cinco páginas comparten un carrito que se guarda en el navegador, el catálogo filtra al instante sin backend y el checkout valida, calcula envío, impuestos y códigos promocionales y confirma el pedido. Cada bloque es un componente de la librería: puedes usar la tienda entera o solo las piezas que necesites.',
48
+ ru: 'Nova Store — готовый к продакшену шаблон интернет-магазина на Astro. Пять страниц используют общую корзину, которая сохраняется в браузере, каталог фильтруется мгновенно без бэкенда, а оформление заказа проверяет данные, считает доставку, налог и промокоды и подтверждает заказ. Каждый блок — компонент библиотеки: используйте весь магазин или только нужные части.',
49
+ },
50
+ highlights: {
51
+ en: ['Persistent cart with drawer and live badge', 'Instant filters: category, price, colour, rating, stock', 'Checkout with shipping, tax and promo codes', 'Zero runtime dependencies, WCAG AA, mobile-first', 'Product illustrations included — no images needed', 'Light and dark mode with a toggle', 'Live notices: cart toasts, sale countdown, low stock and recent purchases'],
52
+ es: ['Carrito persistente con panel lateral y contador en vivo', 'Filtros instantáneos: categoría, precio, color, valoración y stock', 'Checkout con envío, impuestos y códigos promocionales', 'Sin dependencias en runtime, WCAG AA y mobile-first', 'Ilustraciones de producto incluidas: no necesitas imágenes', 'Modo claro y oscuro con selector', 'Avisos en vivo: toasts del carrito, cuenta atrás, stock bajo y compras recientes'],
53
+ ru: ['Сохраняемая корзина с панелью и живым счётчиком', 'Мгновенные фильтры: категория, цена, цвет, рейтинг, наличие', 'Оформление заказа с доставкой, налогом и промокодами', 'Без runtime-зависимостей, WCAG AA, mobile-first', 'Иллюстрации товаров в комплекте — изображения не нужны', 'Светлая и тёмная тема с переключателем', 'Живые уведомления: корзина, обратный отсчёт, малый остаток и недавние покупки'],
54
+ },
55
+ tags: ['ecommerce', 'shop', 'store', 'cart', 'checkout', 'catalog'],
56
+ previewBase: '/preview/ecommerce/',
57
+ importPath: IMPORT,
58
+ pages: [
59
+ {
60
+ id: 'home',
61
+ path: '',
62
+ name: { en: 'Store home', es: 'Home de la tienda', ru: 'Главная магазина' },
63
+ description: {
64
+ en: 'Hero with featured product, guarantees, categories, best sellers, editorial banner, new arrivals and newsletter.',
65
+ es: 'Hero con producto destacado, garantías, categorías, más vendidos, banner editorial, novedades y newsletter.',
66
+ ru: 'Hero с избранным товаром, гарантии, категории, хиты продаж, баннер, новинки и рассылка.',
67
+ },
68
+ file: 'src/pages/index.astro',
69
+ code: `---
70
+ import { StoreHomePage } from '${IMPORT}';
71
+ ---
72
+
73
+ <StoreHomePage />`,
74
+ },
75
+ {
76
+ id: 'category',
77
+ path: 'shop/',
78
+ name: { en: 'Category page', es: 'Página de categoría', ru: 'Страница категории' },
79
+ description: {
80
+ en: 'Catalogue with breadcrumb, category chips, sticky filters, live result count and sorting.',
81
+ es: 'Catálogo con migas de pan, chips de categoría, filtros fijos, contador de resultados y ordenación.',
82
+ ru: 'Каталог с хлебными крошками, чипами категорий, фильтрами, счётчиком результатов и сортировкой.',
83
+ },
84
+ file: 'src/pages/shop.astro',
85
+ code: `---
86
+ import { StoreCategoryPage } from '${IMPORT}';
87
+ ---
88
+
89
+ <!-- Category links use /shop/?category=audio -->
90
+ <StoreCategoryPage />`,
91
+ },
92
+ {
93
+ id: 'product',
94
+ path: 'product/aurora-headphones/',
95
+ name: { en: 'Product page', es: 'Ficha de producto', ru: 'Карточка товара' },
96
+ description: {
97
+ en: 'Gallery, buy box with colour/size pickers and quantity, reviews summary and related products.',
98
+ es: 'Galería, bloque de compra con color, talla y cantidad, resumen de reseñas y productos relacionados.',
99
+ ru: 'Галерея, блок покупки с выбором цвета, размера и количества, отзывы и похожие товары.',
100
+ },
101
+ file: 'src/pages/product/[slug].astro',
102
+ code: `---
103
+ import { StoreProductPage, demoStore } from '${IMPORT}';
104
+
105
+ export function getStaticPaths() {
106
+ return demoStore.products.map((p) => ({ params: { slug: p.slug } }));
107
+ }
108
+ ---
109
+
110
+ <StoreProductPage slug={Astro.params.slug} />`,
111
+ },
112
+ {
113
+ id: 'checkout',
114
+ path: 'checkout/',
115
+ name: { en: 'Checkout', es: 'Checkout', ru: 'Оформление заказа' },
116
+ description: {
117
+ en: 'Focus-mode checkout with steps, contact, delivery, shipping, payment and live order summary.',
118
+ es: 'Checkout en modo foco con pasos, contacto, entrega, envío, pago y resumen del pedido en vivo.',
119
+ ru: 'Оформление заказа в режиме фокуса: шаги, контакты, доставка, оплата и итог заказа.',
120
+ },
121
+ file: 'src/pages/checkout.astro',
122
+ code: `---
123
+ import { StoreCheckoutPage } from '${IMPORT}';
124
+ ---
125
+
126
+ <StoreCheckoutPage />`,
127
+ },
128
+ ],
129
+ newComponents: [
130
+ 'store-header', 'promo-bar', 'cart-drawer', 'store-hero', 'category-tiles', 'trust-badges',
131
+ 'store-product-card', 'product-grid', 'filter-sidebar', 'product-toolbar', 'product-gallery',
132
+ 'variant-picker', 'product-buy-box', 'order-summary', 'checkout-form', 'product-media', 'product-rating', 'cart-toast', 'live-activity-toast', 'countdown-banner', 'stock-indicator', 'cart-store',
133
+ ],
134
+ reusedComponents: [
135
+ 'badge', 'stepper-input', 'animated-input', 'modern-select', 'custom-radio-group', 'animated-checkmark',
136
+ 'step-breadcrumb-bar', 'footer-mega-section', 'logo-cloud-section', 'cta-newsletter-section',
137
+ ],
138
+ storeConfigExample: `---
139
+ // src/pages/index.astro — same store + routes on every page
140
+ import { StoreHomePage, demoStore, type StoreConfig } from '${IMPORT}';
141
+
142
+ const store: StoreConfig = {
143
+ ...demoStore,
144
+ name: 'My Shop',
145
+ currency: 'EUR',
146
+ locale: 'es-ES',
147
+ cartKey: 'my-shop-cart',
148
+ products: [
149
+ {
150
+ slug: 'linen-shirt',
151
+ name: 'Linen Shirt',
152
+ price: 59,
153
+ category: 'apparel',
154
+ image: '/products/linen-shirt.webp', // or icon: 'shirt'
155
+ sizes: ['S', 'M', 'L'],
156
+ rating: 4.7,
157
+ reviews: 40,
158
+ },
159
+ ],
160
+ };
161
+ ---
162
+
163
+ <StoreHomePage store={store} routes={{ home: '/', shop: '/shop/', product: '/product/', checkout: '/checkout/' }} />`,
164
+ },
165
+ {
166
+ slug: 'ecommerce-editorial',
167
+ name: { en: 'E-commerce 2 · Editorial', es: 'E-commerce 2 · Editorial', ru: 'E-commerce 2 · Editorial' },
168
+ tagline: {
169
+ en: 'A magazine-style store for fashion and objects: serif type, square corners, a dedicated bag page.',
170
+ es: 'Una tienda estilo revista para moda y objetos: tipografía serif, esquinas rectas y página de bolsa propia.',
171
+ ru: 'Магазин в журнальном стиле для одежды и предметов: serif-шрифт, прямые углы и отдельная страница корзины.',
172
+ },
173
+ description: {
174
+ en: 'Forma Studio is the second e-commerce template and deliberately different from the first: an editorial layout with oversized serif headlines, a terracotta accent, thin rules and numbered indexes. Shoppers browse with a horizontal filter bar, add sizes straight from the grid, see a shoppable lookbook and review everything on a full bag page before a split-screen checkout. Every block is a section in the library, so you can drop the header, hero, product rail or lookbook into any site — in light or dark mode.',
175
+ es: 'Forma Studio es la segunda plantilla e-commerce y es distinta a propósito: un diseño editorial con titulares serif gigantes, acento terracota, líneas finas e índices numerados. Se navega con una barra de filtros horizontal, se añaden tallas directamente desde la cuadrícula, hay un lookbook comprable y una página de bolsa completa antes de un checkout a pantalla partida. Cada bloque es una sección de la librería, así que puedes usar la cabecera, el hero, el carrusel o el lookbook en cualquier web, en modo claro u oscuro.',
176
+ ru: 'Forma Studio — второй шаблон интернет-магазина, намеренно непохожий на первый: редакционная вёрстка с крупными serif-заголовками, терракотовым акцентом, тонкими линиями и нумерацией. Каталог фильтруется горизонтальной панелью, размер можно добавить прямо из сетки, есть лукбук с покупкой и полноценная страница корзины перед оформлением заказа на разделённом экране. Каждый блок — секция библиотеки, поэтому шапку, hero, карусель или лукбук можно использовать на любом сайте в светлой или тёмной теме.',
177
+ },
178
+ highlights: {
179
+ en: ['Editorial design: serif display type, square corners, terracotta accent', 'Light mode by default, dark mode with a toggle', 'Dedicated bag page with gift note and free-shipping progress', 'Quick-add sizes from the grid + horizontal filter bar', 'Shoppable lookbook with hotspots', '10 reusable sections in Sections → E-commerce'],
180
+ es: ['Diseño editorial: tipografía serif, esquinas rectas y acento terracota', 'Modo claro por defecto y modo oscuro con selector', 'Página de bolsa con nota de regalo y progreso a envío gratis', 'Añadir tallas desde la cuadrícula + barra de filtros horizontal', 'Lookbook comprable con puntos interactivos', '10 secciones reutilizables en Secciones → E-commerce'],
181
+ ru: ['Редакционный дизайн: serif-шрифт, прямые углы, терракотовый акцент', 'Светлая тема по умолчанию и тёмная с переключателем', 'Отдельная страница корзины с подарочной запиской', 'Быстрый выбор размера в сетке + горизонтальные фильтры', 'Лукбук с интерактивными точками', '10 секций в разделе «Секции → E-commerce»'],
182
+ },
183
+ tags: ['ecommerce', 'editorial', 'fashion', 'store', 'light-mode', 'lookbook'],
184
+ previewBase: '/preview/ecommerce-editorial/',
185
+ importPath: 'astro-component-kit/templates/ecommerce-editorial',
186
+ pages: [
187
+ {
188
+ id: 'home', path: '',
189
+ name: { en: 'Home', es: 'Home', ru: 'Главная' },
190
+ description: { en: 'Magazine hero, collection mosaic, new-in rail, shoppable lookbook, values, reviews and newsletter.', es: 'Hero de revista, mosaico de colecciones, novedades, lookbook comprable, valores, reseñas y newsletter.', ru: 'Журнальный hero, мозаика коллекций, новинки, лукбук, ценности, отзывы и подписка.' },
191
+ file: 'src/pages/index.astro',
192
+ code: `---
193
+ import { EditorialHomePage } from 'astro-component-kit/templates/ecommerce-editorial';
194
+ ---
195
+
196
+ <EditorialHomePage theme="light" />`,
197
+ },
198
+ {
199
+ id: 'shop', path: 'shop/',
200
+ name: { en: 'Shop / category', es: 'Tienda / categoría', ru: 'Каталог' },
201
+ description: { en: 'Category hero, sticky filter bar with refine panel and an editorial grid with quick add.', es: 'Hero de categoría, barra de filtros fija con panel de refinado y cuadrícula editorial con añadido rápido.', ru: 'Hero категории, липкая панель фильтров и редакционная сетка с быстрым добавлением.' },
202
+ file: 'src/pages/shop.astro',
203
+ code: `---
204
+ import { EditorialShopPage } from 'astro-component-kit/templates/ecommerce-editorial';
205
+ ---
206
+
207
+ <EditorialShopPage />`,
208
+ },
209
+ {
210
+ id: 'product', path: 'product/linen-overshirt/',
211
+ name: { en: 'Product', es: 'Producto', ru: 'Товар' },
212
+ description: { en: 'Stacked images, sticky info with colour and size, stock notice, care notes and "Complete the look".', es: 'Imágenes apiladas, info fija con color y talla, aviso de stock, cuidados y «Completa el look».', ru: 'Фото столбцом, закреплённая информация с цветом и размером, остаток, уход и «Дополните образ».' },
213
+ file: 'src/pages/product/[slug].astro',
214
+ code: `---
215
+ import { EditorialProductPage, formaStore } from 'astro-component-kit/templates/ecommerce-editorial';
216
+
217
+ export function getStaticPaths() {
218
+ return formaStore.products.map((p) => ({ params: { slug: p.slug } }));
219
+ }
220
+ ---
221
+
222
+ <EditorialProductPage slug={Astro.params.slug} />`,
223
+ },
224
+ {
225
+ id: 'bag', path: 'bag/',
226
+ name: { en: 'Bag', es: 'Bolsa', ru: 'Корзина' },
227
+ description: { en: 'Full bag page with quantities, gift note, free-shipping progress and summary.', es: 'Página de bolsa con cantidades, nota de regalo, progreso a envío gratis y resumen.', ru: 'Страница корзины с количеством, запиской, прогрессом доставки и итогом.' },
228
+ file: 'src/pages/bag.astro',
229
+ code: `---
230
+ import { EditorialBagPage } from 'astro-component-kit/templates/ecommerce-editorial';
231
+ ---
232
+
233
+ <EditorialBagPage />`,
234
+ },
235
+ {
236
+ id: 'checkout', path: 'checkout/',
237
+ name: { en: 'Checkout', es: 'Checkout', ru: 'Оформление' },
238
+ description: { en: 'Split-screen checkout with the form on paper and a tinted order-summary panel.', es: 'Checkout a pantalla partida con el formulario y un panel tintado con el resumen.', ru: 'Оформление на разделённом экране: форма и тонированная панель итога.' },
239
+ file: 'src/pages/checkout.astro',
240
+ code: `---
241
+ import { EditorialCheckoutPage } from 'astro-component-kit/templates/ecommerce-editorial';
242
+ ---
243
+
244
+ <EditorialCheckoutPage />`,
245
+ },
246
+ ],
247
+ newComponents: [
248
+ 'shop-header-editorial', 'shop-hero-editorial', 'shop-collection-mosaic', 'shop-product-rail', 'shop-lookbook',
249
+ 'shop-values-marquee', 'shop-reviews-editorial', 'shop-newsletter-editorial', 'shop-footer-wordmark', 'shop-category-hero',
250
+ 'product-card-minimal', 'filter-bar', 'cart-page-list',
251
+ ],
252
+ reusedComponents: [
253
+ 'cart-store', 'cart-toast', 'product-media', 'product-rating', 'variant-picker', 'stock-indicator',
254
+ 'checkout-form', 'order-summary', 'animated-input', 'modern-select', 'custom-radio-group', 'animated-checkmark', 'badge',
255
+ ],
256
+ storeConfigExample: `---
257
+ // src/pages/index.astro — same store + routes on every page
258
+ import { EditorialHomePage, formaStore, type EditorialStore } from 'astro-component-kit/templates/ecommerce-editorial';
259
+
260
+ const store: EditorialStore = {
261
+ ...formaStore,
262
+ name: 'Atelier',
263
+ currency: 'USD',
264
+ locale: 'en-US',
265
+ cartKey: 'atelier-bag',
266
+ };
267
+ ---
268
+
269
+ <EditorialHomePage
270
+ store={store}
271
+ theme="auto"
272
+ routes={{ home: '/', shop: '/shop/', product: '/product/', bag: '/bag/', checkout: '/checkout/' }}
273
+ />`,
274
+ },
275
+ {
276
+ slug: 'saas-hotel',
277
+ name: { en: 'SaaS · Hotel management', es: 'SaaS · Gestión hotelera', ru: 'SaaS · Управление отелем' },
278
+ tagline: {
279
+ en: 'A complete SaaS for hotels: marketing site, sign-in and a full operations dashboard.',
280
+ es: 'Un SaaS completo para hoteles: web de marketing, inicio de sesión y un dashboard de operaciones entero.',
281
+ ru: 'Полноценный SaaS для отелей: маркетинговый сайт, вход и полный операционный дашборд.',
282
+ },
283
+ description: {
284
+ en: 'Lobby is a hotel operating system built from the library: a landing page made of existing sections, a sign-in screen and an app with dashboard, room rack, reservations table, housekeeping board, guest CRM, revenue reports and account settings with team and billing. Every chart is a zero-dependency SVG chart from the library, and the whole app switches between light and dark mode.',
285
+ es: 'Lobby es un sistema operativo hotelero hecho con la librería: una landing con secciones existentes, una pantalla de acceso y una app con dashboard, rack de habitaciones, tabla de reservas, tablero de limpieza, CRM de huéspedes, informes de ingresos y ajustes de cuenta con equipo y facturación. Todos los gráficos son gráficos SVG sin dependencias de la librería y toda la app cambia entre modo claro y oscuro.',
286
+ ru: 'Lobby — операционная система для отеля, собранная из библиотеки: лендинг из готовых секций, экран входа и приложение с дашбордом, шахматкой, таблицей бронирований, доской уборки, CRM гостей, отчётами о выручке и настройками аккаунта с командой и оплатой. Все графики — SVG-графики библиотеки без зависимостей, а приложение переключается между светлой и тёмной темой.',
287
+ },
288
+ highlights: {
289
+ en: ['8 pages: landing, sign-in and a 6-screen app', 'Room rack, housekeeping board and front-desk check-in', 'Sortable data tables with search, filters and bulk actions', '13 SVG charts reused from the library', 'Settings with team roles, invites and plan usage', 'Light and dark mode with a topbar toggle'],
290
+ es: ['8 páginas: landing, acceso y una app de 6 pantallas', 'Rack de habitaciones, tablero de limpieza y check-in en recepción', 'Tablas ordenables con búsqueda, filtros y acciones masivas', '13 gráficos SVG reutilizados de la librería', 'Ajustes con roles de equipo, invitaciones y uso del plan', 'Modo claro y oscuro con selector en la barra superior'],
291
+ ru: ['8 страниц: лендинг, вход и приложение из 6 экранов', 'Шахматка, доска уборки и заселение на ресепшене', 'Сортируемые таблицы с поиском, фильтрами и массовыми действиями', '13 SVG-графиков из библиотеки', 'Настройки с ролями, приглашениями и использованием тарифа', 'Светлая и тёмная тема с переключателем'],
292
+ },
293
+ tags: ['saas', 'dashboard', 'hotel', 'admin', 'charts', 'crm'],
294
+ previewBase: '/preview/saas-hotel/',
295
+ importPath: 'astro-component-kit/templates/saas-hotel',
296
+ pages: [
297
+ {
298
+ id: 'landing', path: '',
299
+ name: { en: 'Landing', es: 'Landing', ru: 'Лендинг' },
300
+ description: { en: 'Marketing site: hero, logos, features, how it works, stats, pricing toggle, testimonials and FAQ.', es: 'Web de marketing: hero, logos, funciones, cómo funciona, cifras, precios con selector, testimonios y FAQ.', ru: 'Маркетинговый сайт: hero, логотипы, функции, как это работает, цифры, тарифы, отзывы и FAQ.' },
301
+ file: 'src/pages/index.astro',
302
+ code: `---
303
+ import { LandingPage } from 'astro-component-kit/templates/saas-hotel';
304
+ ---
305
+
306
+ <LandingPage />`,
307
+ },
308
+ {
309
+ id: 'signin', path: 'sign-in/',
310
+ name: { en: 'Sign in', es: 'Inicio de sesión', ru: 'Вход' },
311
+ description: { en: 'Split-screen sign-in with SSO, password toggle and validation.', es: 'Inicio de sesión a pantalla partida con SSO, mostrar contraseña y validación.', ru: 'Вход на разделённом экране с SSO, показом пароля и проверкой.' },
312
+ file: 'src/pages/sign-in.astro',
313
+ code: `---
314
+ import { SignInPage } from 'astro-component-kit/templates/saas-hotel';
315
+ ---
316
+
317
+ <SignInPage />`,
318
+ },
319
+ {
320
+ id: 'dashboard', path: 'app/',
321
+ name: { en: 'Dashboard', es: 'Dashboard', ru: 'Дашборд' },
322
+ description: { en: 'KPIs, revenue mix, tonight gauge, front desk, channel mix, occupancy by room type and live activity.', es: 'KPIs, ingresos, ocupación de esta noche, recepción, canales, ocupación por tipo y actividad en vivo.', ru: 'KPI, выручка, загрузка на сегодня, ресепшен, каналы, загрузка по типам номеров и активность.' },
323
+ file: 'src/pages/app/index.astro',
324
+ code: `---
325
+ import { DashboardPage } from 'astro-component-kit/templates/saas-hotel';
326
+ ---
327
+
328
+ <DashboardPage />`,
329
+ },
330
+ {
331
+ id: 'reservations', path: 'app/reservations/',
332
+ name: { en: 'Reservations', es: 'Reservas', ru: 'Бронирования' },
333
+ description: { en: 'Room rack for 14 days and a searchable, sortable reservations table with bulk actions.', es: 'Rack de habitaciones de 14 días y tabla de reservas con búsqueda, orden y acciones masivas.', ru: 'Шахматка на 14 дней и таблица бронирований с поиском, сортировкой и массовыми действиями.' },
334
+ file: 'src/pages/app/reservations.astro',
335
+ code: `---
336
+ import { ReservationsPage } from 'astro-component-kit/templates/saas-hotel';
337
+ ---
338
+
339
+ <ReservationsPage />`,
340
+ },
341
+ {
342
+ id: 'rooms', path: 'app/rooms/',
343
+ name: { en: 'Rooms & housekeeping', es: 'Habitaciones y limpieza', ru: 'Номера и уборка' },
344
+ description: { en: 'Status KPIs, inventory by type and an interactive housekeeping board by floor.', es: 'KPIs de estado, inventario por tipo y tablero de limpieza interactivo por planta.', ru: 'KPI статусов, фонд по типам и интерактивная доска уборки по этажам.' },
345
+ file: 'src/pages/app/rooms.astro',
346
+ code: `---
347
+ import { RoomsPage } from 'astro-component-kit/templates/saas-hotel';
348
+ ---
349
+
350
+ <RoomsPage />`,
351
+ },
352
+ {
353
+ id: 'guests', path: 'app/guests/',
354
+ name: { en: 'Guests', es: 'Huéspedes', ru: 'Гости' },
355
+ description: { en: 'Guest directory with tiers, stays and spend next to a CRM profile.', es: 'Directorio de huéspedes con niveles, estancias y gasto junto a una ficha CRM.', ru: 'Справочник гостей с уровнями, визитами и тратами рядом с CRM-карточкой.' },
356
+ file: 'src/pages/app/guests.astro',
357
+ code: `---
358
+ import { GuestsPage } from 'astro-component-kit/templates/saas-hotel';
359
+ ---
360
+
361
+ <GuestsPage />`,
362
+ },
363
+ {
364
+ id: 'reports', path: 'app/reports/',
365
+ name: { en: 'Reports', es: 'Informes', ru: 'Отчёты' },
366
+ description: { en: 'Forecast, booking pace heatmap, funnel, segments, ADR by channel and month-over-month table.', es: 'Previsión, mapa de ritmo de reservas, embudo, segmentos, ADR por canal y comparativa mensual.', ru: 'Прогноз, тепловая карта темпа бронирований, воронка, сегменты, ADR по каналам и сравнение месяцев.' },
367
+ file: 'src/pages/app/reports.astro',
368
+ code: `---
369
+ import { ReportsPage } from 'astro-component-kit/templates/saas-hotel';
370
+ ---
371
+
372
+ <ReportsPage />`,
373
+ },
374
+ {
375
+ id: 'settings', path: 'app/settings/',
376
+ name: { en: 'Settings & account', es: 'Ajustes y cuenta', ru: 'Настройки и аккаунт' },
377
+ description: { en: 'Profile, property, notification switches, team roles and invites, plan and billing.', es: 'Perfil, propiedad, notificaciones, equipo con roles e invitaciones, plan y facturación.', ru: 'Профиль, отель, уведомления, команда с ролями и приглашениями, тариф и оплата.' },
378
+ file: 'src/pages/app/settings.astro',
379
+ code: `---
380
+ import { SettingsPage } from 'astro-component-kit/templates/saas-hotel';
381
+ ---
382
+
383
+ <SettingsPage />`,
384
+ },
385
+ ],
386
+ newComponents: [
387
+ 'app-sidebar', 'app-topbar', 'page-header', 'data-table', 'room-rack', 'housekeeping-board', 'arrivals-board',
388
+ 'guest-profile-card', 'settings-section', 'switch-row', 'team-members', 'plan-usage-card', 'auth-card',
389
+ ],
390
+ reusedComponents: [
391
+ 'kpi-stat-tile', 'stacked-area-chart', 'gauge-chart', 'pie-chart', 'grouped-bar-chart', 'forecast-line-chart',
392
+ 'heatmap-chart', 'funnel-chart', 'segmented-bar-chart', 'horizontal-bar-chart', 'metric-delta-table',
393
+ 'status-timeline-feed', 'animated-input', 'modern-select',
394
+ 'hero-dashboard-preview', 'logo-wall-grid', 'feature-icon-grid', 'how-it-works-steps', 'stats-counter-band',
395
+ 'pricing-toggle-cards', 'testimonial-carousel', 'faq-two-column', 'footer-mega-section',
396
+ ],
397
+ storeConfigExample: `---
398
+ // src/pages/app/index.astro — pass your own data (e.g. fetched from your API at build time)
399
+ import { DashboardPage, lobbyData, type LobbyData } from 'astro-component-kit/templates/saas-hotel';
400
+
401
+ const data: LobbyData = {
402
+ ...lobbyData,
403
+ workspace: { name: 'Casa Alba', plan: 'Starter', initials: 'CA' },
404
+ user: { name: 'Marta Gil', role: 'Owner', email: 'marta@casaalba.com' },
405
+ };
406
+ ---
407
+
408
+ <DashboardPage data={data} theme="auto" />`,
409
+ },
410
+ ];
411
+
412
+ export function getTemplateBySlug(slug: string): TemplateDoc | undefined {
413
+ return templates.find((t) => t.slug === slug);
414
+ }
@@ -0,0 +1,30 @@
1
+ // src/data/registry/types.ts
2
+ export interface ComponentDoc {
3
+ slug: string;
4
+ name: string;
5
+ description: string;
6
+ category: string;
7
+ sectionCategory?: string;
8
+ tags: string[];
9
+ featured?: boolean;
10
+ code: string;
11
+ usage: string;
12
+ installation?: {
13
+ command?: string;
14
+ manual?: string;
15
+ };
16
+ }
17
+
18
+ export interface Category {
19
+ id: string;
20
+ name: string;
21
+ icon: string;
22
+ description: string;
23
+ }
24
+
25
+ export interface SectionCategory {
26
+ id: string;
27
+ name: string;
28
+ description: string;
29
+ icon: string;
30
+ }