@thorprovider/blocks 2.0.0 → 3.0.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 (842) hide show
  1. package/README.md +120 -8
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts +21 -0
  4. package/dist/blocks/application/app-shells/app-shell-1-sidebar.d.ts.map +1 -0
  5. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js +147 -0
  6. package/dist/blocks/application/app-shells/app-shell-1-sidebar.js.map +1 -0
  7. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs +153 -0
  8. package/dist/blocks/application/app-shells/app-shell-1-sidebar.mjs.map +1 -0
  9. package/dist/blocks/application/app-shells/app-shell-1.d.ts +27 -0
  10. package/dist/blocks/application/app-shells/app-shell-1.d.ts.map +1 -0
  11. package/dist/blocks/application/app-shells/app-shell-1.js +150 -0
  12. package/dist/blocks/application/app-shells/app-shell-1.js.map +1 -0
  13. package/dist/blocks/application/app-shells/app-shell-1.mjs +123 -0
  14. package/dist/blocks/application/app-shells/app-shell-1.mjs.map +1 -0
  15. package/dist/blocks/application/login-forms/login-page.d.ts +42 -0
  16. package/dist/blocks/application/login-forms/login-page.d.ts.map +1 -0
  17. package/dist/blocks/application/login-forms/login-page.js +209 -0
  18. package/dist/blocks/application/login-forms/login-page.js.map +1 -0
  19. package/dist/blocks/application/login-forms/login-page.mjs +185 -0
  20. package/dist/blocks/application/login-forms/login-page.mjs.map +1 -0
  21. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts +3 -0
  22. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.d.ts.map +1 -0
  23. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js +74 -0
  24. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.js.map +1 -0
  25. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs +50 -0
  26. package/dist/blocks/application/password-recovery/forgot-password-page-1-brand-mark.mjs.map +1 -0
  27. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts +42 -0
  28. package/dist/blocks/application/password-recovery/forgot-password-page-1.d.ts.map +1 -0
  29. package/dist/blocks/application/password-recovery/forgot-password-page-1.js +293 -0
  30. package/dist/blocks/application/password-recovery/forgot-password-page-1.js.map +1 -0
  31. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs +259 -0
  32. package/dist/blocks/application/password-recovery/forgot-password-page-1.mjs.map +1 -0
  33. package/dist/blocks/application/signup-forms/signup-page-1.d.ts +41 -0
  34. package/dist/blocks/application/signup-forms/signup-page-1.d.ts.map +1 -0
  35. package/dist/blocks/application/signup-forms/signup-page-1.js +195 -0
  36. package/dist/blocks/application/signup-forms/signup-page-1.js.map +1 -0
  37. package/dist/blocks/application/signup-forms/signup-page-1.mjs +171 -0
  38. package/dist/blocks/application/signup-forms/signup-page-1.mjs.map +1 -0
  39. package/dist/blocks/application/verification/verify-1.d.ts +35 -0
  40. package/dist/blocks/application/verification/verify-1.d.ts.map +1 -0
  41. package/dist/blocks/application/verification/verify-1.js +243 -0
  42. package/dist/blocks/application/verification/verify-1.js.map +1 -0
  43. package/dist/blocks/application/verification/verify-1.mjs +219 -0
  44. package/dist/blocks/application/verification/verify-1.mjs.map +1 -0
  45. package/dist/blocks/application/verification/verify-confetti.d.ts +22 -0
  46. package/dist/blocks/application/verification/verify-confetti.d.ts.map +1 -0
  47. package/dist/blocks/application/verification/verify-confetti.js +145 -0
  48. package/dist/blocks/application/verification/verify-confetti.js.map +1 -0
  49. package/dist/blocks/application/verification/verify-confetti.mjs +121 -0
  50. package/dist/blocks/application/verification/verify-confetti.mjs.map +1 -0
  51. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts +39 -0
  52. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.d.ts.map +1 -0
  53. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js +180 -0
  54. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.js.map +1 -0
  55. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs +156 -0
  56. package/dist/blocks/e-commerce/category-filters/category-listing-filter-fields.mjs.map +1 -0
  57. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts +236 -0
  58. package/dist/blocks/e-commerce/category-filters/category-listing.d.ts.map +1 -0
  59. package/dist/blocks/e-commerce/category-filters/category-listing.js +562 -0
  60. package/dist/blocks/e-commerce/category-filters/category-listing.js.map +1 -0
  61. package/dist/blocks/e-commerce/category-filters/category-listing.mjs +539 -0
  62. package/dist/blocks/e-commerce/category-filters/category-listing.mjs.map +1 -0
  63. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts +4 -0
  64. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.d.ts.map +1 -0
  65. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +97 -0
  66. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -0
  67. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +73 -0
  68. package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -0
  69. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts +41 -0
  70. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.d.ts.map +1 -0
  71. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js +115 -0
  72. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.js.map +1 -0
  73. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs +91 -0
  74. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.mjs.map +1 -0
  75. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts +107 -0
  76. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.d.ts.map +1 -0
  77. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js +180 -0
  78. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.js.map +1 -0
  79. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs +156 -0
  80. package/dist/blocks/e-commerce/checkout-forms/checkout-confirmation.mjs.map +1 -0
  81. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +13 -0
  82. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -0
  83. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +180 -0
  84. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -0
  85. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +156 -0
  86. package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -0
  87. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts +12 -0
  88. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -0
  89. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +50 -0
  90. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -0
  91. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +33 -0
  92. package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -0
  93. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts +11 -0
  94. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.d.ts.map +1 -0
  95. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js +50 -0
  96. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.js.map +1 -0
  97. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs +25 -0
  98. package/dist/blocks/e-commerce/checkout-forms/checkout-field-feedback.mjs.map +1 -0
  99. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts +5 -0
  100. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.d.ts.map +1 -0
  101. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js +17 -0
  102. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.js.map +1 -0
  103. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs +1 -0
  104. package/dist/blocks/e-commerce/checkout-forms/checkout-form-types.mjs.map +1 -0
  105. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +20 -0
  106. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -0
  107. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +176 -0
  108. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -0
  109. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +152 -0
  110. package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -0
  111. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +12 -0
  112. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -0
  113. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +93 -0
  114. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -0
  115. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +69 -0
  116. package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -0
  117. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts +11 -0
  118. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.d.ts.map +1 -0
  119. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js +76 -0
  120. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.js.map +1 -0
  121. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs +52 -0
  122. package/dist/blocks/e-commerce/checkout-forms/checkout-progress.mjs.map +1 -0
  123. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +11 -0
  124. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -0
  125. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +64 -0
  126. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -0
  127. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +40 -0
  128. package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -0
  129. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +17 -0
  130. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -0
  131. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +199 -0
  132. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -0
  133. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +175 -0
  134. package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -0
  135. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +164 -0
  136. package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -0
  137. package/dist/blocks/e-commerce/checkout-forms/checkout.js +351 -0
  138. package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -0
  139. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +327 -0
  140. package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -0
  141. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts +28 -0
  142. package/dist/blocks/e-commerce/navigation/back-to-top.d.ts.map +1 -0
  143. package/dist/blocks/e-commerce/navigation/back-to-top.js +78 -0
  144. package/dist/blocks/e-commerce/navigation/back-to-top.js.map +1 -0
  145. package/dist/blocks/e-commerce/navigation/back-to-top.mjs +52 -0
  146. package/dist/blocks/e-commerce/navigation/back-to-top.mjs.map +1 -0
  147. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts +61 -0
  148. package/dist/blocks/e-commerce/navigation/breadcrumb.d.ts.map +1 -0
  149. package/dist/blocks/e-commerce/navigation/breadcrumb.js +111 -0
  150. package/dist/blocks/e-commerce/navigation/breadcrumb.js.map +1 -0
  151. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs +93 -0
  152. package/dist/blocks/e-commerce/navigation/breadcrumb.mjs.map +1 -0
  153. package/dist/blocks/e-commerce/navigation/category-icon.d.ts +28 -0
  154. package/dist/blocks/e-commerce/navigation/category-icon.d.ts.map +1 -0
  155. package/dist/blocks/e-commerce/navigation/category-icon.js +86 -0
  156. package/dist/blocks/e-commerce/navigation/category-icon.js.map +1 -0
  157. package/dist/blocks/e-commerce/navigation/category-icon.mjs +79 -0
  158. package/dist/blocks/e-commerce/navigation/category-icon.mjs.map +1 -0
  159. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts +112 -0
  160. package/dist/blocks/e-commerce/navigation/mega-menu.d.ts.map +1 -0
  161. package/dist/blocks/e-commerce/navigation/mega-menu.js +250 -0
  162. package/dist/blocks/e-commerce/navigation/mega-menu.js.map +1 -0
  163. package/dist/blocks/e-commerce/navigation/mega-menu.mjs +228 -0
  164. package/dist/blocks/e-commerce/navigation/mega-menu.mjs.map +1 -0
  165. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts +71 -0
  166. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.d.ts.map +1 -0
  167. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js +94 -0
  168. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.js.map +1 -0
  169. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs +68 -0
  170. package/dist/blocks/e-commerce/navigation/mobile-bottom-nav.mjs.map +1 -0
  171. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts +121 -0
  172. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.d.ts.map +1 -0
  173. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js +257 -0
  174. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.js.map +1 -0
  175. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs +235 -0
  176. package/dist/blocks/e-commerce/navigation/mobile-category-drawer.mjs.map +1 -0
  177. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts +25 -0
  178. package/dist/blocks/e-commerce/navigation/skip-to-content.d.ts.map +1 -0
  179. package/dist/blocks/e-commerce/navigation/skip-to-content.js +55 -0
  180. package/dist/blocks/e-commerce/navigation/skip-to-content.js.map +1 -0
  181. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs +30 -0
  182. package/dist/blocks/e-commerce/navigation/skip-to-content.mjs.map +1 -0
  183. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts +23 -0
  184. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.d.ts.map +1 -0
  185. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js +127 -0
  186. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.js.map +1 -0
  187. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs +111 -0
  188. package/dist/blocks/e-commerce/navigation/storefront-navbar-account-menu.mjs.map +1 -0
  189. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts +66 -0
  190. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -0
  191. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +280 -0
  192. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -0
  193. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +263 -0
  194. package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -0
  195. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts +13 -0
  196. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.d.ts.map +1 -0
  197. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js +83 -0
  198. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.js.map +1 -0
  199. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs +59 -0
  200. package/dist/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.mjs.map +1 -0
  201. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts +8 -0
  202. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.d.ts.map +1 -0
  203. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js +73 -0
  204. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.js.map +1 -0
  205. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs +49 -0
  206. package/dist/blocks/e-commerce/navigation/storefront-navbar-search-bar.mjs.map +1 -0
  207. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts +121 -0
  208. package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -0
  209. package/dist/blocks/e-commerce/navigation/storefront-navbar.js +424 -0
  210. package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -0
  211. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +399 -0
  212. package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -0
  213. package/dist/blocks/e-commerce/order-history/order-history.d.ts +74 -0
  214. package/dist/blocks/e-commerce/order-history/order-history.d.ts.map +1 -0
  215. package/dist/blocks/e-commerce/order-history/order-history.js +161 -0
  216. package/dist/blocks/e-commerce/order-history/order-history.js.map +1 -0
  217. package/dist/blocks/e-commerce/order-history/order-history.mjs +141 -0
  218. package/dist/blocks/e-commerce/order-history/order-history.mjs.map +1 -0
  219. package/dist/blocks/e-commerce/order-history/order-line.d.ts +50 -0
  220. package/dist/blocks/e-commerce/order-history/order-line.d.ts.map +1 -0
  221. package/dist/blocks/e-commerce/order-history/order-line.js +75 -0
  222. package/dist/blocks/e-commerce/order-history/order-line.js.map +1 -0
  223. package/dist/blocks/e-commerce/order-history/order-line.mjs +49 -0
  224. package/dist/blocks/e-commerce/order-history/order-line.mjs.map +1 -0
  225. package/dist/blocks/e-commerce/product-categories/category-card.d.ts +9 -0
  226. package/dist/blocks/e-commerce/product-categories/category-card.d.ts.map +1 -0
  227. package/dist/blocks/e-commerce/product-categories/category-card.js +154 -0
  228. package/dist/blocks/e-commerce/product-categories/category-card.js.map +1 -0
  229. package/dist/blocks/e-commerce/product-categories/category-card.mjs +134 -0
  230. package/dist/blocks/e-commerce/product-categories/category-card.mjs.map +1 -0
  231. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts +15 -0
  232. package/dist/blocks/e-commerce/product-categories/category-shared.d.ts.map +1 -0
  233. package/dist/blocks/e-commerce/product-categories/category-shared.js +101 -0
  234. package/dist/blocks/e-commerce/product-categories/category-shared.js.map +1 -0
  235. package/dist/blocks/e-commerce/product-categories/category-shared.mjs +97 -0
  236. package/dist/blocks/e-commerce/product-categories/category-shared.mjs.map +1 -0
  237. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts +10 -0
  238. package/dist/blocks/e-commerce/product-categories/product-category-grid.d.ts.map +1 -0
  239. package/dist/blocks/e-commerce/product-categories/product-category-grid.js +138 -0
  240. package/dist/blocks/e-commerce/product-categories/product-category-grid.js.map +1 -0
  241. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs +114 -0
  242. package/dist/blocks/e-commerce/product-categories/product-category-grid.mjs.map +1 -0
  243. package/dist/blocks/e-commerce/product-categories/product-category.d.ts +41 -0
  244. package/dist/blocks/e-commerce/product-categories/product-category.d.ts.map +1 -0
  245. package/dist/blocks/e-commerce/product-categories/product-category.js +319 -0
  246. package/dist/blocks/e-commerce/product-categories/product-category.js.map +1 -0
  247. package/dist/blocks/e-commerce/product-categories/product-category.mjs +322 -0
  248. package/dist/blocks/e-commerce/product-categories/product-category.mjs.map +1 -0
  249. package/dist/blocks/e-commerce/product-list/product-card.d.ts +47 -0
  250. package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -0
  251. package/dist/blocks/e-commerce/product-list/product-card.js +361 -0
  252. package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -0
  253. package/dist/blocks/e-commerce/product-list/product-card.mjs +337 -0
  254. package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -0
  255. package/dist/blocks/e-commerce/product-list/product-grid.d.ts +28 -0
  256. package/dist/blocks/e-commerce/product-list/product-grid.d.ts.map +1 -0
  257. package/dist/blocks/e-commerce/product-list/product-grid.js +92 -0
  258. package/dist/blocks/e-commerce/product-list/product-grid.js.map +1 -0
  259. package/dist/blocks/e-commerce/product-list/product-grid.mjs +68 -0
  260. package/dist/blocks/e-commerce/product-list/product-grid.mjs.map +1 -0
  261. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts +30 -0
  262. package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -0
  263. package/dist/blocks/e-commerce/product-list/product-showcase-1.js +245 -0
  264. package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -0
  265. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +221 -0
  266. package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -0
  267. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts +20 -0
  268. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.d.ts.map +1 -0
  269. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js +71 -0
  270. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.js.map +1 -0
  271. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs +47 -0
  272. package/dist/blocks/e-commerce/product-overview/product-overview-gallery.mjs.map +1 -0
  273. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts +15 -0
  274. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.d.ts.map +1 -0
  275. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js +118 -0
  276. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.js.map +1 -0
  277. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs +94 -0
  278. package/dist/blocks/e-commerce/product-overview/product-overview-lightbox-tab.mjs.map +1 -0
  279. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts +26 -0
  280. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.d.ts.map +1 -0
  281. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js +85 -0
  282. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.js.map +1 -0
  283. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs +61 -0
  284. package/dist/blocks/e-commerce/product-overview/product-overview-reviews-tab.mjs.map +1 -0
  285. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts +32 -0
  286. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.d.ts.map +1 -0
  287. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js +79 -0
  288. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.js.map +1 -0
  289. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs +51 -0
  290. package/dist/blocks/e-commerce/product-overview/product-overview-tabs.mjs.map +1 -0
  291. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts +121 -0
  292. package/dist/blocks/e-commerce/product-overview/product-overview.d.ts.map +1 -0
  293. package/dist/blocks/e-commerce/product-overview/product-overview.js +844 -0
  294. package/dist/blocks/e-commerce/product-overview/product-overview.js.map +1 -0
  295. package/dist/blocks/e-commerce/product-overview/product-overview.mjs +821 -0
  296. package/dist/blocks/e-commerce/product-overview/product-overview.mjs.map +1 -0
  297. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts +17 -0
  298. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.d.ts.map +1 -0
  299. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js +123 -0
  300. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.js.map +1 -0
  301. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs +99 -0
  302. package/dist/blocks/e-commerce/product-overview/product-quick-view-card.mjs.map +1 -0
  303. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts +20 -0
  304. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -0
  305. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +271 -0
  306. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -0
  307. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +253 -0
  308. package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -0
  309. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts +68 -0
  310. package/dist/blocks/e-commerce/product-overview/product-quick-view.d.ts.map +1 -0
  311. package/dist/blocks/e-commerce/product-overview/product-quick-view.js +84 -0
  312. package/dist/blocks/e-commerce/product-overview/product-quick-view.js.map +1 -0
  313. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs +60 -0
  314. package/dist/blocks/e-commerce/product-overview/product-quick-view.mjs.map +1 -0
  315. package/dist/blocks/e-commerce/reviews/review-card.d.ts +60 -0
  316. package/dist/blocks/e-commerce/reviews/review-card.d.ts.map +1 -0
  317. package/dist/blocks/e-commerce/reviews/review-card.js +166 -0
  318. package/dist/blocks/e-commerce/reviews/review-card.js.map +1 -0
  319. package/dist/blocks/e-commerce/reviews/review-card.mjs +139 -0
  320. package/dist/blocks/e-commerce/reviews/review-card.mjs.map +1 -0
  321. package/dist/blocks/e-commerce/reviews/review-composer.d.ts +50 -0
  322. package/dist/blocks/e-commerce/reviews/review-composer.d.ts.map +1 -0
  323. package/dist/blocks/e-commerce/reviews/review-composer.js +180 -0
  324. package/dist/blocks/e-commerce/reviews/review-composer.js.map +1 -0
  325. package/dist/blocks/e-commerce/reviews/review-composer.mjs +155 -0
  326. package/dist/blocks/e-commerce/reviews/review-composer.mjs.map +1 -0
  327. package/dist/blocks/e-commerce/reviews/review-list.d.ts +40 -0
  328. package/dist/blocks/e-commerce/reviews/review-list.d.ts.map +1 -0
  329. package/dist/blocks/e-commerce/reviews/review-list.js +138 -0
  330. package/dist/blocks/e-commerce/reviews/review-list.js.map +1 -0
  331. package/dist/blocks/e-commerce/reviews/review-list.mjs +119 -0
  332. package/dist/blocks/e-commerce/reviews/review-list.mjs.map +1 -0
  333. package/dist/blocks/e-commerce/reviews/review-summary.d.ts +49 -0
  334. package/dist/blocks/e-commerce/reviews/review-summary.d.ts.map +1 -0
  335. package/dist/blocks/e-commerce/reviews/review-summary.js +150 -0
  336. package/dist/blocks/e-commerce/reviews/review-summary.js.map +1 -0
  337. package/dist/blocks/e-commerce/reviews/review-summary.mjs +124 -0
  338. package/dist/blocks/e-commerce/reviews/review-summary.mjs.map +1 -0
  339. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts +98 -0
  340. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.d.ts.map +1 -0
  341. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js +417 -0
  342. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.js.map +1 -0
  343. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs +393 -0
  344. package/dist/blocks/e-commerce/shopping-carts/shopping-cart.mjs.map +1 -0
  345. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts +13 -0
  346. package/dist/blocks/e-commerce/store-containers/store-container-1.d.ts.map +1 -0
  347. package/dist/blocks/e-commerce/store-containers/store-container-1.js +45 -0
  348. package/dist/blocks/e-commerce/store-containers/store-container-1.js.map +1 -0
  349. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs +21 -0
  350. package/dist/blocks/e-commerce/store-containers/store-container-1.mjs.map +1 -0
  351. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts +163 -0
  352. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -0
  353. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +810 -0
  354. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -0
  355. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +786 -0
  356. package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -0
  357. package/dist/blocks/marketing/banners/avatar-group.d.ts +8 -0
  358. package/dist/blocks/marketing/banners/avatar-group.d.ts.map +1 -0
  359. package/dist/blocks/marketing/banners/avatar-group.js +90 -0
  360. package/dist/blocks/marketing/banners/avatar-group.js.map +1 -0
  361. package/dist/blocks/marketing/banners/avatar-group.mjs +56 -0
  362. package/dist/blocks/marketing/banners/avatar-group.mjs.map +1 -0
  363. package/dist/blocks/marketing/banners/banner-1.d.ts +26 -0
  364. package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -0
  365. package/dist/blocks/marketing/banners/banner-1.js +177 -0
  366. package/dist/blocks/marketing/banners/banner-1.js.map +1 -0
  367. package/dist/blocks/marketing/banners/banner-1.mjs +153 -0
  368. package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -0
  369. package/dist/blocks/marketing/cta/cta-section-1.d.ts +13 -0
  370. package/dist/blocks/marketing/cta/cta-section-1.d.ts.map +1 -0
  371. package/dist/blocks/marketing/cta/cta-section-1.js +116 -0
  372. package/dist/blocks/marketing/cta/cta-section-1.js.map +1 -0
  373. package/dist/blocks/marketing/cta/cta-section-1.mjs +92 -0
  374. package/dist/blocks/marketing/cta/cta-section-1.mjs.map +1 -0
  375. package/dist/blocks/marketing/faq/faq-block-1.d.ts +16 -0
  376. package/dist/blocks/marketing/faq/faq-block-1.d.ts.map +1 -0
  377. package/dist/blocks/marketing/faq/faq-block-1.js +49 -0
  378. package/dist/blocks/marketing/faq/faq-block-1.js.map +1 -0
  379. package/dist/blocks/marketing/faq/faq-block-1.mjs +25 -0
  380. package/dist/blocks/marketing/faq/faq-block-1.mjs.map +1 -0
  381. package/dist/blocks/marketing/features/feature.d.ts +45 -0
  382. package/dist/blocks/marketing/features/feature.d.ts.map +1 -0
  383. package/dist/blocks/marketing/features/feature.js +135 -0
  384. package/dist/blocks/marketing/features/feature.js.map +1 -0
  385. package/dist/blocks/marketing/features/feature.mjs +111 -0
  386. package/dist/blocks/marketing/features/feature.mjs.map +1 -0
  387. package/dist/blocks/marketing/footers/footer-section.d.ts +59 -0
  388. package/dist/blocks/marketing/footers/footer-section.d.ts.map +1 -0
  389. package/dist/blocks/marketing/footers/footer-section.js +356 -0
  390. package/dist/blocks/marketing/footers/footer-section.js.map +1 -0
  391. package/dist/blocks/marketing/footers/footer-section.mjs +332 -0
  392. package/dist/blocks/marketing/footers/footer-section.mjs.map +1 -0
  393. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts +9 -0
  394. package/dist/blocks/marketing/hero-sections/avatar-group.d.ts.map +1 -0
  395. package/dist/blocks/marketing/hero-sections/avatar-group.js +92 -0
  396. package/dist/blocks/marketing/hero-sections/avatar-group.js.map +1 -0
  397. package/dist/blocks/marketing/hero-sections/avatar-group.mjs +58 -0
  398. package/dist/blocks/marketing/hero-sections/avatar-group.mjs.map +1 -0
  399. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts +27 -0
  400. package/dist/blocks/marketing/hero-sections/hero-section-1.d.ts.map +1 -0
  401. package/dist/blocks/marketing/hero-sections/hero-section-1.js +124 -0
  402. package/dist/blocks/marketing/hero-sections/hero-section-1.js.map +1 -0
  403. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs +100 -0
  404. package/dist/blocks/marketing/hero-sections/hero-section-1.mjs.map +1 -0
  405. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts +19 -0
  406. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.d.ts.map +1 -0
  407. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js +63 -0
  408. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.js.map +1 -0
  409. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs +39 -0
  410. package/dist/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.mjs.map +1 -0
  411. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts +13 -0
  412. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.d.ts.map +1 -0
  413. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js +49 -0
  414. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.js.map +1 -0
  415. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs +25 -0
  416. package/dist/blocks/marketing/logo-clouds/logo-cloud-1.mjs.map +1 -0
  417. package/dist/blocks/marketing/navbars/navbar.d.ts +80 -0
  418. package/dist/blocks/marketing/navbars/navbar.d.ts.map +1 -0
  419. package/dist/blocks/marketing/navbars/navbar.js +484 -0
  420. package/dist/blocks/marketing/navbars/navbar.js.map +1 -0
  421. package/dist/blocks/marketing/navbars/navbar.mjs +475 -0
  422. package/dist/blocks/marketing/navbars/navbar.mjs.map +1 -0
  423. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts +23 -0
  424. package/dist/blocks/marketing/pricing/pricing-section-1.d.ts.map +1 -0
  425. package/dist/blocks/marketing/pricing/pricing-section-1.js +89 -0
  426. package/dist/blocks/marketing/pricing/pricing-section-1.js.map +1 -0
  427. package/dist/blocks/marketing/pricing/pricing-section-1.mjs +65 -0
  428. package/dist/blocks/marketing/pricing/pricing-section-1.mjs.map +1 -0
  429. package/dist/blocks/marketing/statistics/statistic-1.d.ts +19 -0
  430. package/dist/blocks/marketing/statistics/statistic-1.d.ts.map +1 -0
  431. package/dist/blocks/marketing/statistics/statistic-1.js +83 -0
  432. package/dist/blocks/marketing/statistics/statistic-1.js.map +1 -0
  433. package/dist/blocks/marketing/statistics/statistic-1.mjs +59 -0
  434. package/dist/blocks/marketing/statistics/statistic-1.mjs.map +1 -0
  435. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts +29 -0
  436. package/dist/blocks/marketing/testimonials/testimonial-section.d.ts.map +1 -0
  437. package/dist/blocks/marketing/testimonials/testimonial-section.js +173 -0
  438. package/dist/blocks/marketing/testimonials/testimonial-section.js.map +1 -0
  439. package/dist/blocks/marketing/testimonials/testimonial-section.mjs +155 -0
  440. package/dist/blocks/marketing/testimonials/testimonial-section.mjs.map +1 -0
  441. package/dist/blocks/shared/reaction-toggle.d.ts +14 -0
  442. package/dist/blocks/shared/reaction-toggle.d.ts.map +1 -0
  443. package/dist/blocks/shared/reaction-toggle.js +138 -0
  444. package/dist/blocks/shared/reaction-toggle.js.map +1 -0
  445. package/dist/blocks/shared/reaction-toggle.mjs +114 -0
  446. package/dist/blocks/shared/reaction-toggle.mjs.map +1 -0
  447. package/dist/hooks/use-mobile.d.ts +2 -0
  448. package/dist/hooks/use-mobile.d.ts.map +1 -0
  449. package/dist/hooks/use-mobile.js +53 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-mobile.mjs +19 -0
  452. package/dist/hooks/use-mobile.mjs.map +1 -0
  453. package/dist/index.d.ts +100 -0
  454. package/dist/index.d.ts.map +1 -0
  455. package/dist/index.js +339 -0
  456. package/dist/index.js.map +1 -0
  457. package/dist/index.mjs +238 -0
  458. package/dist/index.mjs.map +1 -0
  459. package/{src/lib/cart.ts → dist/lib/cart.d.ts} +2 -3
  460. package/dist/lib/cart.d.ts.map +1 -0
  461. package/dist/lib/cart.js +31 -0
  462. package/dist/lib/cart.js.map +1 -0
  463. package/dist/lib/cart.mjs +7 -0
  464. package/dist/lib/cart.mjs.map +1 -0
  465. package/dist/lib/contracts.d.ts +4008 -0
  466. package/dist/lib/contracts.d.ts.map +1 -0
  467. package/dist/lib/contracts.js +828 -0
  468. package/dist/lib/contracts.js.map +1 -0
  469. package/dist/lib/contracts.mjs +737 -0
  470. package/dist/lib/contracts.mjs.map +1 -0
  471. package/dist/lib/money.d.ts +28 -0
  472. package/dist/lib/money.d.ts.map +1 -0
  473. package/dist/lib/money.js +50 -0
  474. package/dist/lib/money.js.map +1 -0
  475. package/dist/lib/money.mjs +24 -0
  476. package/dist/lib/money.mjs.map +1 -0
  477. package/dist/lib/types/menu.d.ts +40 -0
  478. package/dist/lib/types/menu.d.ts.map +1 -0
  479. package/dist/lib/types/menu.js +50 -0
  480. package/dist/lib/types/menu.js.map +1 -0
  481. package/dist/lib/types/menu.mjs +25 -0
  482. package/dist/lib/types/menu.mjs.map +1 -0
  483. package/dist/lib/types.d.ts +5 -0
  484. package/dist/lib/types.d.ts.map +1 -0
  485. package/dist/lib/types.js +17 -0
  486. package/dist/lib/types.js.map +1 -0
  487. package/dist/lib/types.mjs +1 -0
  488. package/dist/lib/types.mjs.map +1 -0
  489. package/dist/lib/utils.d.ts +7 -0
  490. package/dist/lib/utils.d.ts.map +1 -0
  491. package/dist/lib/utils.js +33 -0
  492. package/dist/lib/utils.js.map +1 -0
  493. package/dist/lib/utils.mjs +9 -0
  494. package/dist/lib/utils.mjs.map +1 -0
  495. package/dist/ui/accordion.d.ts +8 -0
  496. package/dist/ui/accordion.d.ts.map +1 -0
  497. package/dist/ui/accordion.js +93 -0
  498. package/dist/ui/accordion.js.map +1 -0
  499. package/dist/ui/accordion.mjs +66 -0
  500. package/dist/ui/accordion.mjs.map +1 -0
  501. package/dist/ui/avatar.d.ts +12 -0
  502. package/dist/ui/avatar.d.ts.map +1 -0
  503. package/dist/ui/avatar.js +134 -0
  504. package/dist/ui/avatar.js.map +1 -0
  505. package/{src/ui/avatar.tsx → dist/ui/avatar.mjs} +67 -70
  506. package/dist/ui/avatar.mjs.map +1 -0
  507. package/dist/ui/badge.d.ts +10 -0
  508. package/dist/ui/badge.d.ts.map +1 -0
  509. package/dist/ui/badge.js +69 -0
  510. package/dist/ui/badge.js.map +1 -0
  511. package/dist/ui/badge.mjs +44 -0
  512. package/dist/ui/badge.mjs.map +1 -0
  513. package/dist/ui/breadcrumb.d.ts +12 -0
  514. package/dist/ui/breadcrumb.d.ts.map +1 -0
  515. package/dist/ui/breadcrumb.js +134 -0
  516. package/dist/ui/breadcrumb.js.map +1 -0
  517. package/dist/ui/breadcrumb.mjs +104 -0
  518. package/dist/ui/breadcrumb.mjs.map +1 -0
  519. package/dist/ui/button-group.d.ts +12 -0
  520. package/dist/ui/button-group.d.ts.map +1 -0
  521. package/dist/ui/button-group.js +104 -0
  522. package/dist/ui/button-group.js.map +1 -0
  523. package/dist/ui/button-group.mjs +77 -0
  524. package/dist/ui/button-group.mjs.map +1 -0
  525. package/dist/ui/button.d.ts +11 -0
  526. package/dist/ui/button.d.ts.map +1 -0
  527. package/dist/ui/button.js +82 -0
  528. package/dist/ui/button.js.map +1 -0
  529. package/dist/ui/button.mjs +57 -0
  530. package/dist/ui/button.mjs.map +1 -0
  531. package/dist/ui/card.d.ts +10 -0
  532. package/dist/ui/card.d.ts.map +1 -0
  533. package/dist/ui/card.js +121 -0
  534. package/dist/ui/card.js.map +1 -0
  535. package/dist/ui/card.mjs +91 -0
  536. package/dist/ui/card.mjs.map +1 -0
  537. package/dist/ui/carousel.d.ts +20 -0
  538. package/dist/ui/carousel.d.ts.map +1 -0
  539. package/dist/ui/carousel.js +238 -0
  540. package/dist/ui/carousel.js.map +1 -0
  541. package/dist/ui/carousel.mjs +200 -0
  542. package/dist/ui/carousel.mjs.map +1 -0
  543. package/dist/ui/dialog.d.ts +18 -0
  544. package/dist/ui/dialog.d.ts.map +1 -0
  545. package/dist/ui/dialog.js +181 -0
  546. package/dist/ui/dialog.js.map +1 -0
  547. package/dist/ui/dialog.mjs +148 -0
  548. package/dist/ui/dialog.mjs.map +1 -0
  549. package/dist/ui/drawer.d.ts +14 -0
  550. package/dist/ui/drawer.d.ts.map +1 -0
  551. package/dist/ui/drawer.js +163 -0
  552. package/dist/ui/drawer.js.map +1 -0
  553. package/dist/ui/drawer.mjs +130 -0
  554. package/dist/ui/drawer.mjs.map +1 -0
  555. package/dist/ui/dropdown-menu.d.ts +26 -0
  556. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  557. package/dist/ui/dropdown-menu.js +271 -0
  558. package/dist/ui/dropdown-menu.js.map +1 -0
  559. package/dist/ui/dropdown-menu.mjs +233 -0
  560. package/dist/ui/dropdown-menu.mjs.map +1 -0
  561. package/dist/ui/empty.d.ts +12 -0
  562. package/dist/ui/empty.d.ts.map +1 -0
  563. package/dist/ui/empty.js +132 -0
  564. package/dist/ui/empty.js.map +1 -0
  565. package/dist/ui/empty.mjs +103 -0
  566. package/dist/ui/empty.mjs.map +1 -0
  567. package/dist/ui/field.d.ts +25 -0
  568. package/dist/ui/field.d.ts.map +1 -0
  569. package/dist/ui/field.js +264 -0
  570. package/dist/ui/field.js.map +1 -0
  571. package/{src/ui/field.tsx → dist/ui/field.mjs} +142 -159
  572. package/dist/ui/field.mjs.map +1 -0
  573. package/dist/ui/input-group.d.ts +17 -0
  574. package/dist/ui/input-group.d.ts.map +1 -0
  575. package/dist/ui/input-group.js +185 -0
  576. package/dist/ui/input-group.js.map +1 -0
  577. package/{src/ui/input-group.tsx → dist/ui/input-group.mjs} +92 -106
  578. package/dist/ui/input-group.mjs.map +1 -0
  579. package/dist/ui/input-otp.d.ts +12 -0
  580. package/dist/ui/input-otp.d.ts.map +1 -0
  581. package/dist/ui/input-otp.js +105 -0
  582. package/dist/ui/input-otp.js.map +1 -0
  583. package/dist/ui/input-otp.mjs +68 -0
  584. package/dist/ui/input-otp.mjs.map +1 -0
  585. package/dist/ui/input.d.ts +4 -0
  586. package/dist/ui/input.d.ts.map +1 -0
  587. package/dist/ui/input.js +46 -0
  588. package/dist/ui/input.js.map +1 -0
  589. package/{src/ui/input.tsx → dist/ui/input.mjs} +17 -15
  590. package/dist/ui/input.mjs.map +1 -0
  591. package/dist/ui/label.d.ts +5 -0
  592. package/dist/ui/label.d.ts.map +1 -0
  593. package/dist/ui/label.js +48 -0
  594. package/dist/ui/label.js.map +1 -0
  595. package/dist/ui/label.mjs +24 -0
  596. package/dist/ui/label.mjs.map +1 -0
  597. package/dist/ui/navigation-menu.d.ts +15 -0
  598. package/dist/ui/navigation-menu.d.ts.map +1 -0
  599. package/dist/ui/navigation-menu.js +203 -0
  600. package/dist/ui/navigation-menu.js.map +1 -0
  601. package/{src/ui/navigation-menu.tsx → dist/ui/navigation-menu.mjs} +116 -112
  602. package/dist/ui/navigation-menu.mjs.map +1 -0
  603. package/dist/ui/pagination.d.ts +14 -0
  604. package/dist/ui/pagination.d.ts.map +1 -0
  605. package/dist/ui/pagination.js +149 -0
  606. package/dist/ui/pagination.js.map +1 -0
  607. package/dist/ui/pagination.mjs +123 -0
  608. package/dist/ui/pagination.mjs.map +1 -0
  609. package/dist/ui/progress.d.ts +5 -0
  610. package/dist/ui/progress.d.ts.map +1 -0
  611. package/dist/ui/progress.js +57 -0
  612. package/dist/ui/progress.js.map +1 -0
  613. package/dist/ui/progress.mjs +33 -0
  614. package/dist/ui/progress.mjs.map +1 -0
  615. package/dist/ui/radio-group.d.ts +6 -0
  616. package/dist/ui/radio-group.d.ts.map +1 -0
  617. package/dist/ui/radio-group.js +72 -0
  618. package/dist/ui/radio-group.js.map +1 -0
  619. package/dist/ui/radio-group.mjs +47 -0
  620. package/dist/ui/radio-group.mjs.map +1 -0
  621. package/dist/ui/select.d.ts +16 -0
  622. package/dist/ui/select.d.ts.map +1 -0
  623. package/dist/ui/select.js +213 -0
  624. package/dist/ui/select.js.map +1 -0
  625. package/dist/ui/select.mjs +180 -0
  626. package/dist/ui/select.mjs.map +1 -0
  627. package/dist/ui/separator.d.ts +5 -0
  628. package/dist/ui/separator.d.ts.map +1 -0
  629. package/dist/ui/separator.js +52 -0
  630. package/dist/ui/separator.js.map +1 -0
  631. package/dist/ui/separator.mjs +28 -0
  632. package/dist/ui/separator.mjs.map +1 -0
  633. package/dist/ui/sheet.d.ts +15 -0
  634. package/dist/ui/sheet.d.ts.map +1 -0
  635. package/dist/ui/sheet.js +160 -0
  636. package/dist/ui/sheet.js.map +1 -0
  637. package/dist/ui/sheet.mjs +129 -0
  638. package/dist/ui/sheet.mjs.map +1 -0
  639. package/dist/ui/sidebar.d.ts +70 -0
  640. package/dist/ui/sidebar.d.ts.map +1 -0
  641. package/dist/ui/sidebar.js +697 -0
  642. package/dist/ui/sidebar.js.map +1 -0
  643. package/dist/ui/sidebar.mjs +651 -0
  644. package/dist/ui/sidebar.mjs.map +1 -0
  645. package/dist/ui/skeleton.d.ts +3 -0
  646. package/dist/ui/skeleton.d.ts.map +1 -0
  647. package/dist/ui/skeleton.js +40 -0
  648. package/dist/ui/skeleton.js.map +1 -0
  649. package/dist/ui/skeleton.mjs +16 -0
  650. package/dist/ui/skeleton.mjs.map +1 -0
  651. package/dist/ui/table.d.ts +11 -0
  652. package/dist/ui/table.d.ts.map +1 -0
  653. package/dist/ui/table.js +147 -0
  654. package/dist/ui/table.js.map +1 -0
  655. package/dist/ui/table.mjs +116 -0
  656. package/dist/ui/table.mjs.map +1 -0
  657. package/dist/ui/tabs.d.ts +12 -0
  658. package/dist/ui/tabs.d.ts.map +1 -0
  659. package/dist/ui/tabs.js +121 -0
  660. package/dist/ui/tabs.js.map +1 -0
  661. package/{src/ui/tabs.tsx → dist/ui/tabs.mjs} +59 -56
  662. package/dist/ui/tabs.mjs.map +1 -0
  663. package/dist/ui/textarea.d.ts +4 -0
  664. package/dist/ui/textarea.d.ts.map +1 -0
  665. package/dist/ui/textarea.js +43 -0
  666. package/dist/ui/textarea.js.map +1 -0
  667. package/{src/ui/textarea.tsx → dist/ui/textarea.mjs} +16 -14
  668. package/dist/ui/textarea.mjs.map +1 -0
  669. package/dist/ui/toggle-group.d.ts +10 -0
  670. package/dist/ui/toggle-group.d.ts.map +1 -0
  671. package/dist/ui/toggle-group.js +105 -0
  672. package/dist/ui/toggle-group.js.map +1 -0
  673. package/dist/ui/toggle-group.mjs +70 -0
  674. package/dist/ui/toggle-group.mjs.map +1 -0
  675. package/dist/ui/toggle.d.ts +10 -0
  676. package/dist/ui/toggle.d.ts.map +1 -0
  677. package/dist/ui/toggle.js +70 -0
  678. package/dist/ui/toggle.js.map +1 -0
  679. package/{src/ui/toggle.tsx → dist/ui/toggle.mjs} +25 -26
  680. package/dist/ui/toggle.mjs.map +1 -0
  681. package/dist/ui/tooltip.d.ts +8 -0
  682. package/dist/ui/tooltip.d.ts.map +1 -0
  683. package/dist/ui/tooltip.js +84 -0
  684. package/dist/ui/tooltip.js.map +1 -0
  685. package/dist/ui/tooltip.mjs +57 -0
  686. package/dist/ui/tooltip.mjs.map +1 -0
  687. package/package.json +8 -1
  688. package/AGENTS.md +0 -1
  689. package/CHANGELOG.md +0 -155
  690. package/components.json +0 -33
  691. package/docs/standards/data-contracts.md +0 -81
  692. package/docs/standards/theming.md +0 -112
  693. package/scripts/fix-esm-extensions.mjs +0 -40
  694. package/src/blocks/application/app-shells/app-shell-1-sidebar.tsx +0 -198
  695. package/src/blocks/application/app-shells/app-shell-1.tsx +0 -196
  696. package/src/blocks/application/login-forms/login-page.test.tsx +0 -190
  697. package/src/blocks/application/login-forms/login-page.tsx +0 -240
  698. package/src/blocks/application/password-recovery/forgot-password-page-1-brand-mark.tsx +0 -38
  699. package/src/blocks/application/password-recovery/forgot-password-page-1.tsx +0 -318
  700. package/src/blocks/application/signup-forms/signup-page-1.tsx +0 -229
  701. package/src/blocks/application/verification/verify-1.tsx +0 -307
  702. package/src/blocks/application/verification/verify-confetti.tsx +0 -192
  703. package/src/blocks/application/viewport-ownership.test.tsx +0 -41
  704. package/src/blocks/e-commerce/category-filters/category-listing-filter-fields.tsx +0 -218
  705. package/src/blocks/e-commerce/category-filters/category-listing.test.tsx +0 -601
  706. package/src/blocks/e-commerce/category-filters/category-listing.tsx +0 -934
  707. package/src/blocks/e-commerce/checkout-forms/checkbox-check.tsx +0 -74
  708. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +0 -195
  709. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +0 -136
  710. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +0 -329
  711. package/src/blocks/e-commerce/checkout-forms/checkout-contact-step.tsx +0 -149
  712. package/src/blocks/e-commerce/checkout-forms/checkout-country-field.tsx +0 -53
  713. package/src/blocks/e-commerce/checkout-forms/checkout-field-feedback.tsx +0 -29
  714. package/src/blocks/e-commerce/checkout-forms/checkout-form-types.ts +0 -7
  715. package/src/blocks/e-commerce/checkout-forms/checkout-order-summary.tsx +0 -230
  716. package/src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx +0 -100
  717. package/src/blocks/e-commerce/checkout-forms/checkout-progress.tsx +0 -62
  718. package/src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx +0 -59
  719. package/src/blocks/e-commerce/checkout-forms/checkout-shipping-step.tsx +0 -180
  720. package/src/blocks/e-commerce/checkout-forms/checkout.test.tsx +0 -478
  721. package/src/blocks/e-commerce/checkout-forms/checkout.tsx +0 -550
  722. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +0 -27
  723. package/src/blocks/e-commerce/navigation/back-to-top.tsx +0 -71
  724. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +0 -174
  725. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +0 -130
  726. package/src/blocks/e-commerce/navigation/category-icon.test.tsx +0 -54
  727. package/src/blocks/e-commerce/navigation/category-icon.tsx +0 -94
  728. package/src/blocks/e-commerce/navigation/mega-menu.test.tsx +0 -139
  729. package/src/blocks/e-commerce/navigation/mega-menu.tsx +0 -271
  730. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +0 -74
  731. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +0 -78
  732. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +0 -192
  733. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +0 -278
  734. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +0 -35
  735. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +0 -37
  736. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.test.tsx +0 -56
  737. package/src/blocks/e-commerce/navigation/storefront-navbar-account-menu.tsx +0 -134
  738. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.test.tsx +0 -204
  739. package/src/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.tsx +0 -371
  740. package/src/blocks/e-commerce/navigation/storefront-navbar-mobile-nav.tsx +0 -96
  741. package/src/blocks/e-commerce/navigation/storefront-navbar-search-bar.tsx +0 -52
  742. package/src/blocks/e-commerce/navigation/storefront-navbar.test.tsx +0 -264
  743. package/src/blocks/e-commerce/navigation/storefront-navbar.tsx +0 -604
  744. package/src/blocks/e-commerce/order-history/order-history-1.tsx +0 -159
  745. package/src/blocks/e-commerce/order-history/order-history-2.tsx +0 -222
  746. package/src/blocks/e-commerce/product-categories/category-card-grid.test.tsx +0 -122
  747. package/src/blocks/e-commerce/product-categories/category-card.test.tsx +0 -68
  748. package/src/blocks/e-commerce/product-categories/category-card.tsx +0 -172
  749. package/src/blocks/e-commerce/product-categories/category-grid.test.tsx +0 -67
  750. package/src/blocks/e-commerce/product-categories/category-shared.tsx +0 -109
  751. package/src/blocks/e-commerce/product-categories/product-category-grid.tsx +0 -170
  752. package/src/blocks/e-commerce/product-categories/product-category.test.tsx +0 -266
  753. package/src/blocks/e-commerce/product-categories/product-category.tsx +0 -462
  754. package/src/blocks/e-commerce/product-list/product-card.test.tsx +0 -263
  755. package/src/blocks/e-commerce/product-list/product-card.tsx +0 -447
  756. package/src/blocks/e-commerce/product-list/product-grid.test.tsx +0 -162
  757. package/src/blocks/e-commerce/product-list/product-grid.tsx +0 -114
  758. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +0 -78
  759. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +0 -277
  760. package/src/blocks/e-commerce/product-overview/product-overview-gallery.tsx +0 -71
  761. package/src/blocks/e-commerce/product-overview/product-overview-lightbox-tab.tsx +0 -116
  762. package/src/blocks/e-commerce/product-overview/product-overview-reviews-tab.tsx +0 -105
  763. package/src/blocks/e-commerce/product-overview/product-overview-tabs.tsx +0 -70
  764. package/src/blocks/e-commerce/product-overview/product-overview.test.tsx +0 -283
  765. package/src/blocks/e-commerce/product-overview/product-overview.tsx +0 -1186
  766. package/src/blocks/e-commerce/product-overview/product-quick-view-card.tsx +0 -135
  767. package/src/blocks/e-commerce/product-overview/product-quick-view-dialog.tsx +0 -393
  768. package/src/blocks/e-commerce/product-overview/product-quick-view.tsx +0 -136
  769. package/src/blocks/e-commerce/reviews/review-rating-1-review-form.tsx +0 -133
  770. package/src/blocks/e-commerce/reviews/review-rating-1.tsx +0 -178
  771. package/src/blocks/e-commerce/reviews/review-rating-2.tsx +0 -245
  772. package/src/blocks/e-commerce/shopping-carts/shopping-cart.test.tsx +0 -399
  773. package/src/blocks/e-commerce/shopping-carts/shopping-cart.tsx +0 -628
  774. package/src/blocks/e-commerce/store-containers/store-container-1.tsx +0 -29
  775. package/src/blocks/e-commerce/storefront-hero/storefront-hero.test.tsx +0 -412
  776. package/src/blocks/e-commerce/storefront-hero/storefront-hero.tsx +0 -1283
  777. package/src/blocks/marketing/banners/avatar-group.tsx +0 -69
  778. package/src/blocks/marketing/banners/banner-1.tsx +0 -188
  779. package/src/blocks/marketing/cta/cta-section-1.tsx +0 -112
  780. package/src/blocks/marketing/faq/faq-block-1.tsx +0 -45
  781. package/src/blocks/marketing/features/feature.test.tsx +0 -153
  782. package/src/blocks/marketing/features/feature.tsx +0 -195
  783. package/src/blocks/marketing/footers/footer-section-accessibility.test.tsx +0 -118
  784. package/src/blocks/marketing/footers/footer-section-actions.test.tsx +0 -131
  785. package/src/blocks/marketing/footers/footer-section-data.test.tsx +0 -127
  786. package/src/blocks/marketing/footers/footer-section-native-links.test.tsx +0 -100
  787. package/src/blocks/marketing/footers/footer-section-public-api.test.tsx +0 -11
  788. package/src/blocks/marketing/footers/footer-section.test.tsx +0 -46
  789. package/src/blocks/marketing/footers/footer-section.tsx +0 -532
  790. package/src/blocks/marketing/hero-sections/avatar-group.tsx +0 -86
  791. package/src/blocks/marketing/hero-sections/hero-section-1.tsx +0 -135
  792. package/src/blocks/marketing/logo-clouds/logo-cloud-1-logo-icon.tsx +0 -52
  793. package/src/blocks/marketing/logo-clouds/logo-cloud-1.tsx +0 -56
  794. package/src/blocks/marketing/navbars/navbar-public-api.test.tsx +0 -57
  795. package/src/blocks/marketing/navbars/navbar.mega.test.tsx +0 -149
  796. package/src/blocks/marketing/navbars/navbar.test.tsx +0 -155
  797. package/src/blocks/marketing/navbars/navbar.tsx +0 -735
  798. package/src/blocks/marketing/pricing/pricing-section-1.tsx +0 -94
  799. package/src/blocks/marketing/statistics/statistic-1.tsx +0 -93
  800. package/src/blocks/marketing/testimonials/testimonial-section.test.tsx +0 -171
  801. package/src/blocks/marketing/testimonials/testimonial-section.tsx +0 -237
  802. package/src/blocks/shared/reaction-toggle.tsx +0 -145
  803. package/src/hooks/use-mobile.ts +0 -19
  804. package/src/index.ts +0 -284
  805. package/src/lib/cart.test.ts +0 -15
  806. package/src/lib/contracts-curated.test.ts +0 -225
  807. package/src/lib/contracts-server-boundary.test.ts +0 -52
  808. package/src/lib/contracts.test.ts +0 -228
  809. package/src/lib/contracts.ts +0 -857
  810. package/src/lib/money.test.ts +0 -64
  811. package/src/lib/money.ts +0 -65
  812. package/src/lib/types/menu.ts +0 -43
  813. package/src/lib/types.ts +0 -4
  814. package/src/lib/utils.ts +0 -10
  815. package/src/ui/accordion.tsx +0 -65
  816. package/src/ui/badge.tsx +0 -47
  817. package/src/ui/breadcrumb.tsx +0 -108
  818. package/src/ui/button-group.tsx +0 -83
  819. package/src/ui/button.tsx +0 -63
  820. package/src/ui/card.tsx +0 -91
  821. package/src/ui/carousel.tsx +0 -241
  822. package/src/ui/dialog.tsx +0 -158
  823. package/src/ui/drawer.tsx +0 -134
  824. package/src/ui/dropdown-menu.tsx +0 -256
  825. package/src/ui/empty.tsx +0 -103
  826. package/src/ui/input-otp.tsx +0 -76
  827. package/src/ui/label.tsx +0 -23
  828. package/src/ui/pagination.tsx +0 -127
  829. package/src/ui/progress.tsx +0 -30
  830. package/src/ui/radio-group.tsx +0 -44
  831. package/src/ui/select.tsx +0 -189
  832. package/src/ui/separator.tsx +0 -27
  833. package/src/ui/sheet.tsx +0 -142
  834. package/src/ui/sidebar.tsx +0 -726
  835. package/src/ui/skeleton.tsx +0 -13
  836. package/src/ui/table.tsx +0 -115
  837. package/src/ui/toggle-group.tsx +0 -83
  838. package/src/ui/tooltip.tsx +0 -56
  839. package/tsconfig.build.json +0 -12
  840. package/tsconfig.json +0 -20
  841. package/tsup.config.ts +0 -19
  842. package/vitest.config.ts +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/storefront-hero/storefront-hero.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\nimport { ArrowRight, MapPin, Search, ShoppingBag, Star } from 'lucide-react'\nimport type { ComponentProps, ReactNode } from 'react'\n\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { Card, CardContent } from '../../../ui/card'\nimport { Carousel, CarouselContent, CarouselItem, type CarouselApi } from '../../../ui/carousel'\nimport { Input } from '../../../ui/input'\nimport { cn } from '../../../lib/utils'\nimport type { CTA } from '../../../lib/types'\n\n/**\n * Display contract for products featured in the hero. Every popularity,\n * review, or availability field is host-supplied evidence: omitted fields\n * render nothing (honest omission) instead of fabricated defaults.\n */\nexport interface FeaturedProduct {\n id: string\n name: string\n /** Current selling price. */\n price: number\n /** Real compare-at price. Discount treatments render only from a real `originalPrice > price` pair. */\n originalPrice?: number\n /** Image URL or path; omitted entirely when absent or blank (never an empty `src`). */\n image?: string\n /** Accessible image description (falls back to `name`). */\n imageAlt?: string\n /** Host-supplied brand label; the row renders only when supplied. */\n brand?: string\n /** Host-supplied swatch colors; the row renders only when supplied. */\n colors?: string[]\n /** Host-supplied rating (0–5); rendered only when supplied. */\n rating?: number\n /** Host-supplied review count; rendered only when supplied. */\n reviewCount?: number\n /** Host-supplied availability. Absence makes no stock claim; an explicit `false` disables purchase. */\n inStock?: boolean\n /** Host-supplied \"new\" flag; the badge renders only when true. */\n isNew?: boolean\n /** Host-supplied badge label for showcase slides (e.g. a category); rendered only when supplied. */\n tag?: string\n}\n\nexport interface HeroImage {\n src: string\n alt: string\n}\n\nexport interface HeroDepartment {\n id: string\n name: string\n /** Image URL; omitted entirely when absent or blank. */\n image?: string\n /** Accessible image description (falls back to `name`). */\n imageAlt?: string\n /** Host-supplied count label; rendered only when supplied. */\n count?: string\n /** Link destination; renders the chip as a link when present. */\n href?: string\n}\n\nexport interface HeroFeaturedDeal {\n id: string\n name: string\n /** Host-supplied supporting description; rendered only when supplied. */\n description?: string\n /** Image URL; omitted entirely when absent or blank. */\n image?: string\n /** Accessible image description (falls back to `name`). */\n imageAlt?: string\n price: number\n /** Real compare-at price; rendered struck-through only when greater than `price`. */\n originalPrice?: number\n /** Optional call to action shown on the card. */\n cta?: CTA\n}\n\nexport interface HeroStoreLocator {\n title: string\n description: string\n ctaLabel: string\n /** Link destination for the locator button; falls back to `onLocateStores`. */\n ctaHref?: string\n}\n\nexport interface HeroDeal {\n id: string\n /** Deal name shown in the deals bar badge, e.g. a campaign name. */\n title: string\n /** Host-supplied discount label (from a real compare-at price); rendered only when supplied. */\n discount?: string\n /** Host-supplied countdown text; rendered only when supplied — the block never invents one. */\n endTime?: string\n}\n\nexport interface HeroCategory {\n id: string\n name: string\n /** Image URL; omitted entirely when absent or blank. */\n image?: string\n /** Accessible image description (falls back to `name`). */\n imageAlt?: string\n /** Host-supplied count label; rendered only when supplied. */\n count?: string\n /** Link destination; renders the card arrow as a link when present. */\n href?: string\n}\n\n/**\n * The bounded presentation surface, reusing the registry's archetype intent\n * vocabulary: `compact` (text-forward hero + product grid), `showcase`\n * (search affordance + rotating product carousel), `editorial` (department\n * navigation + optional deals/locator), `promotional` (deals bar + category\n * grid). The value changes structure, never the data contract.\n */\nexport type StorefrontHeroPresentation = 'compact' | 'showcase' | 'editorial' | 'promotional'\n\nexport interface StorefrontHeroProps {\n title: string\n description: string\n /** Bounded presentation option; defaults to `compact`. */\n presentation?: StorefrontHeroPresentation\n /** ISO 4217 code used to format prices via `Intl.NumberFormat`; never hardcoded. */\n currency?: string\n /** Featured products. An empty list renders the hero text-forward with no empty grid chrome. */\n products: FeaturedProduct[]\n badge?: string\n titleAccent?: string\n primaryCta?: CTA\n secondaryCta?: CTA\n /**\n * Optional editorial image. Rendered as a native `<img>` when `src` is a\n * non-empty string; omitted entirely when absent or blank (never an empty\n * `src`).\n */\n heroImage?: HeroImage\n /** `showcase` only. The search input renders only when a handler is supplied. */\n onSearch?: (query: string) => void\n /** `editorial` only: department navigation grid. */\n departments?: HeroDepartment[]\n /** `editorial` only: featured deal cards. */\n featuredDeals?: HeroFeaturedDeal[]\n /** `editorial` only: store locator strip. */\n storeLocator?: HeroStoreLocator\n /** `editorial` only: shipping banner text under the CTAs. */\n shippingInfo?: string\n /** `promotional` only: rotating deals bar. */\n deals?: HeroDeal[]\n /** `promotional` only: category card grid. */\n categories?: HeroCategory[]\n /** Milliseconds between rotations (showcase carousel and promotional deals bar; default 3000). */\n rotationInterval?: number\n onAddToCart?: (product: FeaturedProduct) => void\n onBuyNow?: (product: FeaturedProduct) => void\n onSelectColor?: (product: FeaturedProduct, index: number, color: string) => void\n onDepartmentClick?: (department: HeroDepartment) => void\n onShopNow?: (item: HeroFeaturedDeal | HeroDeal) => void\n onLocateStores?: () => void\n onCategoryClick?: (category: HeroCategory) => void\n /** Detail/purchase affordance on product cards and showcase slides. */\n addToCartLabel?: string\n buyNowLabel?: string\n newLabel?: string\n outOfStockLabel?: string\n colorsLabel?: string\n /** Suffix appended to the computed discount percentage (default `% OFF`). */\n discountSuffixLabel?: string\n /** `showcase` labels. */\n searchPlaceholder?: string\n searchLabel?: string\n /** `showcase` copy under each slide's product name. */\n featuredDescription?: string\n /** `editorial`/`promotional` labels. */\n shopNowLabel?: string\n endsInLabel?: string\n productsLabel?: string\n viewLabel?: string\n}\n\nfunction hasRealDiscount(item: Pick<FeaturedProduct, 'price' | 'originalPrice'>): boolean {\n return (\n typeof item.originalPrice === 'number' &&\n Number.isFinite(item.originalPrice) &&\n item.originalPrice > item.price &&\n item.price >= 0\n )\n}\n\nfunction discountPercent(price: number, originalPrice: number): number {\n return Math.round(((originalPrice - price) / originalPrice) * 100)\n}\n\nfunction formatAmount(amount: number, currency?: string): string {\n if (currency) {\n return new Intl.NumberFormat(undefined, { style: 'currency', currency }).format(amount)\n }\n return new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 }).format(amount)\n}\n\nfunction CtaButton({\n cta,\n variant,\n className = 'group relative cursor-pointer overflow-hidden px-8 py-6 text-base font-medium',\n children,\n}: {\n cta: CTA\n variant?: ComponentProps<typeof Button>['variant']\n className?: string\n children: ReactNode\n}) {\n if (cta.href) {\n return (\n <Button variant={variant} size='lg' className={className} asChild>\n <a href={cta.href}>{children}</a>\n </Button>\n )\n }\n\n return (\n <Button variant={variant} size='lg' className={className}>\n {children}\n </Button>\n )\n}\n\nfunction HeroHeading({\n title,\n titleAccent,\n badge,\n}: {\n title: string\n titleAccent?: string\n badge?: string\n}) {\n return (\n <>\n {badge && (\n <div className='border-primary/20 bg-primary/5 text-primary inline-flex items-center rounded-full border px-4 py-1.5 text-sm font-medium backdrop-blur-sm'>\n {badge}\n </div>\n )}\n <h1 className='text-foreground mt-8 text-4xl font-bold tracking-tight sm:text-5xl md:text-7xl'>\n {title}{' '}\n {titleAccent && (\n <span className='from-primary to-primary/70 bg-gradient-to-r bg-clip-text text-transparent'>\n {titleAccent}\n </span>\n )}\n </h1>\n </>\n )\n}\n\nfunction EditorialHeading({\n title,\n titleAccent,\n badge,\n}: {\n title: string\n titleAccent?: string\n badge?: string\n}) {\n return (\n <>\n {badge && (\n <div className='border-primary/20 bg-primary/5 text-primary inline-flex items-center justify-center rounded-md border px-4 py-1.5 text-sm'>\n {badge}\n </div>\n )}\n <h1 className='mt-6 text-4xl font-bold tracking-tight text-balance sm:text-5xl md:text-6xl'>\n {title} {titleAccent && <span className='text-primary'>{titleAccent}</span>}\n </h1>\n </>\n )\n}\n\ninterface HeroLabels {\n addToCartLabel: string\n buyNowLabel: string\n newLabel: string\n outOfStockLabel: string\n colorsLabel: string\n discountSuffixLabel: string\n searchPlaceholder: string\n searchLabel: string\n featuredDescription?: string\n shopNowLabel: string\n endsInLabel: string\n productsLabel: string\n viewLabel: string\n}\n\nfunction CompactProductCard({\n product,\n currency,\n labels,\n onAddToCart,\n onBuyNow,\n onSelectColor,\n hasCustomBuyNowLabel,\n}: {\n product: FeaturedProduct\n currency?: string\n labels: HeroLabels\n onAddToCart?: (product: FeaturedProduct) => void\n onBuyNow?: (product: FeaturedProduct) => void\n onSelectColor?: (product: FeaturedProduct, index: number, color: string) => void\n hasCustomBuyNowLabel: boolean\n}) {\n const outOfStock = product.inStock === false\n const onSale = hasRealDiscount(product)\n // A host-supplied custom action label is a purchase affordance and requires\n // its handler; the block's default label is a detail affordance that may\n // render without one. Never infer this from the label's language.\n const showBuyNow = Boolean(onBuyNow) || !hasCustomBuyNowLabel\n\n return (\n <div className='bg-card relative h-full overflow-hidden rounded-lg border shadow-sm transition-shadow hover:shadow-md'>\n <div className='absolute top-4 left-4 z-10 flex flex-col gap-2'>\n {product.isNew && (\n <Badge variant='secondary' className='rounded-full'>{labels.newLabel}</Badge>\n )}\n {onSale && (\n <Badge variant='destructive' className='rounded-full'>\n {discountPercent(product.price, product.originalPrice as number)}\n {labels.discountSuffixLabel}\n </Badge>\n )}\n </div>\n\n <div className='relative aspect-square overflow-hidden'>\n {product.image && product.image.trim().length > 0 ? (\n <img\n src={product.image}\n alt={product.imageAlt ?? product.name}\n className='size-full object-cover'\n loading='lazy'\n />\n ) : null}\n {outOfStock && (\n <div className='absolute inset-0 flex items-center justify-center bg-black/50'>\n <span className='rounded bg-white/90 px-3 py-1 text-sm font-medium'>{labels.outOfStockLabel}</span>\n </div>\n )}\n </div>\n\n <div className='p-4'>\n {product.brand && product.brand.trim().length > 0 && (\n <div className='text-muted-foreground mb-1 text-sm font-medium'>{product.brand}</div>\n )}\n <h3 className='mb-2 font-medium'>{product.name}</h3>\n\n <div className='mb-3'>\n <span className='text-lg font-bold'>{formatAmount(product.price, currency)}</span>\n {onSale && (\n <span className='text-muted-foreground ms-2 text-sm line-through'>\n {formatAmount(product.originalPrice as number, currency)}\n </span>\n )}\n </div>\n\n {product.colors && product.colors.length > 0 && (\n <div className='mb-4 flex items-center'>\n <span className='text-muted-foreground me-2 text-sm'>{labels.colorsLabel}</span>\n <div className='flex gap-1'>\n {product.colors.map((color, i) => (\n <button\n key={i}\n className='size-5 rounded-full border'\n style={{ backgroundColor: color }}\n aria-label={`Opción de color ${i + 1}`}\n onClick={onSelectColor ? () => onSelectColor(product, i, color) : undefined}\n />\n ))}\n </div>\n </div>\n )}\n\n {typeof product.rating === 'number' && (\n <div className='mb-4 flex items-center'>\n <div className='flex'>\n {[...Array(5)].map((_, i) => (\n <Star\n key={i}\n className={`size-4 ${i < Math.floor(product.rating ?? 0) ? 'fill-foreground text-foreground' : 'text-muted-foreground'}`}\n />\n ))}\n </div>\n {typeof product.reviewCount === 'number' && (\n <span className='text-muted-foreground ms-2 text-sm'>({product.reviewCount.toLocaleString()})</span>\n )}\n </div>\n )}\n\n <div className='flex flex-col gap-2'>\n {onAddToCart && (\n <Button\n variant='outline'\n className='h-9 cursor-pointer px-4 py-2'\n disabled={outOfStock}\n onClick={() => onAddToCart(product)}\n >\n <ShoppingBag />\n {labels.addToCartLabel}\n </Button>\n )}\n {showBuyNow && (\n <Button\n className='h-9 cursor-pointer px-4 py-2'\n disabled={outOfStock}\n onClick={onBuyNow ? () => onBuyNow(product) : undefined}\n >\n {labels.buyNowLabel}\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction CompactPresentation({\n title,\n description,\n products,\n badge,\n titleAccent,\n primaryCta,\n secondaryCta,\n heroImage,\n currency,\n labels,\n onAddToCart,\n onBuyNow,\n onSelectColor,\n hasCustomBuyNowLabel,\n}: {\n title: string\n description: string\n products: FeaturedProduct[]\n badge?: string\n titleAccent?: string\n primaryCta?: CTA\n secondaryCta?: CTA\n heroImage?: HeroImage\n currency?: string\n labels: HeroLabels\n onAddToCart?: (product: FeaturedProduct) => void\n onBuyNow?: (product: FeaturedProduct) => void\n onSelectColor?: (product: FeaturedProduct, index: number, color: string) => void\n hasCustomBuyNowLabel: boolean\n}) {\n const reduceMotion = useReducedMotion()\n\n return (\n <div className='from-primary/5 to-background relative overflow-hidden bg-gradient-to-br'>\n <div className='relative z-10 mx-auto w-full max-w-7xl flex flex-col items-center justify-between gap-12 px-4 sm:px-6 lg:px-8 py-16 lg:py-20 xl:flex-row xl:items-start'>\n <motion.div\n initial={reduceMotion ? false : { opacity: 0, y: 24 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.5, ease: 'easeOut' }}\n className='mx-auto max-w-xl text-center lg:mx-0 xl:text-left'\n >\n <HeroHeading title={title} titleAccent={titleAccent} badge={badge} />\n <p className='text-muted-foreground mt-8 text-lg'>{description}</p>\n {(primaryCta || secondaryCta) && (\n <div className='mt-10 flex flex-col gap-4 sm:flex-row sm:justify-center xl:justify-start'>\n {primaryCta && (\n <CtaButton cta={primaryCta}>\n <span className='relative z-10 flex items-center gap-2'>\n {primaryCta.label}\n <ArrowRight className='transition-transform group-hover:translate-x-1' />\n </span>\n <span className='bg-primary/5 absolute inset-0 -z-0 opacity-0 transition-opacity group-hover:opacity-100'></span>\n </CtaButton>\n )}\n {secondaryCta && (\n <CtaButton cta={secondaryCta} variant='outline'>\n <span className='relative z-10 flex items-center gap-2'>\n <ShoppingBag />\n {secondaryCta.label}\n </span>\n </CtaButton>\n )}\n </div>\n )}\n {heroImage && heroImage.src.trim().length > 0 ? (\n <img\n src={heroImage.src}\n alt={heroImage.alt}\n className='mt-10 aspect-video w-full rounded-lg object-cover'\n />\n ) : null}\n </motion.div>\n\n {products.length > 0 && (\n <div className='w-full max-w-2xl lg:mt-0'>\n <div className='grid gap-6 sm:grid-cols-2'>\n {products.map((product, index) => (\n <motion.div\n key={product.id}\n initial={reduceMotion ? false : { opacity: 0, y: 24 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true, margin: '-40px' }}\n transition={{\n duration: 0.45,\n delay: reduceMotion ? 0 : index * 0.1,\n ease: 'easeOut',\n }}\n >\n <CompactProductCard\n product={product}\n currency={currency}\n labels={labels}\n onAddToCart={onAddToCart}\n onBuyNow={onBuyNow}\n onSelectColor={onSelectColor}\n hasCustomBuyNowLabel={hasCustomBuyNowLabel}\n />\n </motion.div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div className='bg-primary/10 absolute -top-32 -right-32 size-96 rounded-full blur-3xl' />\n <div className='bg-secondary/30 absolute -bottom-32 -left-32 size-96 rounded-full blur-3xl' />\n </div>\n )\n}\n\nfunction ShowcaseSlide({\n product,\n currency,\n labels,\n onBuyNow,\n}: {\n product: FeaturedProduct\n currency?: string\n labels: HeroLabels\n onBuyNow?: (product: FeaturedProduct) => void\n}) {\n const outOfStock = product.inStock === false\n\n return (\n <Card className='relative size-full overflow-hidden border-1 py-4'>\n <CardContent className='px-4'>\n <div className='relative size-full overflow-hidden rounded-md'>\n {product.image && product.image.trim().length > 0 ? (\n <img\n src={product.image}\n alt={product.imageAlt ?? product.name}\n className='h-[500px] w-full object-cover'\n loading='lazy'\n />\n ) : null}\n </div>\n <div className='from-background/90 via-background/30 absolute inset-0 bg-linear-to-t to-transparent' />\n\n <div className='text-background-foreground absolute inset-0 flex flex-col justify-end p-8'>\n <div className='relative z-10 flex max-w-md flex-col gap-4'>\n {product.tag && (\n <Badge className='w-fit rounded-full px-2.5 py-0.5 font-semibold'>{product.tag}</Badge>\n )}\n <h2 className='text-4xl font-bold'>{product.name}</h2>\n {labels.featuredDescription && (\n <p className='text-background-foreground/80 text-lg'>{labels.featuredDescription}</p>\n )}\n <span className='text-3xl font-bold'>{formatAmount(product.price, currency)}</span>\n <div className='flex items-center gap-4 pt-2'>\n {onBuyNow && (\n <Button\n size='lg'\n className='h-10 cursor-pointer rounded-full px-8'\n disabled={outOfStock}\n onClick={() => onBuyNow(product)}\n >\n {labels.buyNowLabel}\n </Button>\n )}\n {typeof product.rating === 'number' && (\n <div className='text-foreground flex items-center gap-1'>\n <Star className='fill-foreground size-5' />\n <span className='font-medium'>{product.rating}</span>\n {typeof product.reviewCount === 'number' && (\n <span className='text-foreground/80'>({product.reviewCount})</span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction ShowcasePresentation({\n title,\n description,\n products,\n badge,\n primaryCta,\n secondaryCta,\n currency,\n labels,\n onSearch,\n onBuyNow,\n rotationInterval,\n}: {\n title: string\n description: string\n products: FeaturedProduct[]\n badge?: string\n primaryCta?: CTA\n secondaryCta?: CTA\n currency?: string\n labels: HeroLabels\n onSearch?: (query: string) => void\n onBuyNow?: (product: FeaturedProduct) => void\n rotationInterval: number\n}) {\n const reduceMotion = useReducedMotion()\n const [searchQuery, setSearchQuery] = useState('')\n const [api, setApi] = useState<CarouselApi>()\n const [currentSlide, setCurrentSlide] = useState(0)\n\n useEffect(() => {\n if (!api || products.length <= 1 || reduceMotion) return\n\n const interval = setInterval(() => {\n const nextSlide = (currentSlide + 1) % products.length\n api.scrollTo(nextSlide)\n setCurrentSlide(nextSlide)\n }, rotationInterval)\n\n return () => clearInterval(interval)\n }, [api, currentSlide, products.length, reduceMotion, rotationInterval])\n\n const handleSearch = () => {\n if (onSearch) onSearch(searchQuery)\n }\n\n return (\n <section className='from-background to-accent/20 relative bg-linear-to-b'>\n <div className='relative mx-auto w-full max-w-7xl px-4 py-16 sm:px-6 lg:px-8 lg:py-20'>\n <div className='grid grid-cols-1 items-center gap-12 lg:grid-cols-2'>\n <header className='flex flex-col gap-8'>\n {badge && (\n <Badge variant='outline' className='flex h-auto w-fit items-center rounded-full px-4 py-2 font-semibold'>\n {badge}\n </Badge>\n )}\n\n <h1 className='text-5xl leading-tight font-bold text-balance md:text-6xl lg:text-7xl'>{title}</h1>\n\n <p className='text-muted-foreground max-w-lg text-xl text-balance'>{description}</p>\n\n {onSearch && (\n <div className='relative max-w-md'>\n <Input\n type='search'\n placeholder={labels.searchPlaceholder}\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') handleSearch()\n }}\n className='h-14 rounded-full pe-4 pl-12 text-lg'\n aria-label={labels.searchPlaceholder}\n />\n <Search className='text-muted-foreground absolute top-1/2 start-4 size-5 -translate-y-1/2' />\n <Button\n size='lg'\n className='absolute top-1/2 end-2 h-10 -translate-y-1/2 cursor-pointer rounded-full px-6'\n onClick={handleSearch}\n >\n {labels.searchLabel}\n </Button>\n </div>\n )}\n\n {(primaryCta || secondaryCta) && (\n <div className='flex items-center gap-4'>\n {primaryCta && (\n <CtaButton cta={primaryCta} className='h-10 cursor-pointer rounded-full px-4'>\n <span className='flex items-center gap-2'>\n {primaryCta.label}\n <ArrowRight />\n </span>\n </CtaButton>\n )}\n {secondaryCta && (\n <CtaButton cta={secondaryCta} variant='outline' className='h-10 cursor-pointer rounded-full px-4'>\n <span className='flex items-center gap-2'>\n <ShoppingBag />\n {secondaryCta.label}\n </span>\n </CtaButton>\n )}\n </div>\n )}\n </header>\n\n {products.length > 0 && (\n <div className='flex flex-col gap-4'>\n <div className='relative h-[500px] w-full border-0'>\n <Carousel\n className='group size-full'\n setApi={setApi}\n opts={{\n align: 'start',\n loop: true,\n duration: 20,\n skipSnaps: true,\n }}\n >\n <CarouselContent className='h-full'>\n {products.map(product => (\n <CarouselItem key={product.id} className='h-full'>\n <ShowcaseSlide product={product} currency={currency} labels={labels} onBuyNow={onBuyNow} />\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n </div>\n\n <div className='relative mt-8 flex justify-center gap-3'>\n {products.map((product, index) => (\n <button\n key={product.id}\n type='button'\n onClick={() => {\n api?.scrollTo(index)\n setCurrentSlide(index)\n }}\n className={cn(\n 'relative size-3 rounded-full transition-all',\n currentSlide === index ? 'bg-primary' : 'bg-foreground/20 hover:bg-foreground/40'\n )}\n aria-label={`Ir a la diapositiva ${index + 1}`}\n aria-current={currentSlide === index ? 'step' : undefined}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </section>\n )\n}\n\nfunction EditorialPresentation({\n title,\n description,\n badge,\n titleAccent,\n primaryCta,\n secondaryCta,\n shippingInfo,\n departments,\n featuredDeals,\n storeLocator,\n currency,\n labels,\n onDepartmentClick,\n onShopNow,\n onLocateStores,\n}: {\n title: string\n description: string\n badge?: string\n titleAccent?: string\n primaryCta?: CTA\n secondaryCta?: CTA\n shippingInfo?: string\n departments: HeroDepartment[]\n featuredDeals: HeroFeaturedDeal[]\n storeLocator?: HeroStoreLocator\n currency?: string\n labels: HeroLabels\n onDepartmentClick?: (department: HeroDepartment) => void\n onShopNow?: (item: HeroFeaturedDeal | HeroDeal) => void\n onLocateStores?: () => void\n}) {\n const departmentChipClasses = cn(\n 'flex flex-col items-center gap-4 rounded-lg p-2 text-center outline-none',\n 'transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring',\n )\n\n return (\n <div className='bg-background relative overflow-hidden'>\n <div className='relative z-10'>\n <div className='mx-auto w-full max-w-7xl px-4 py-16 sm:px-6 lg:px-8 lg:py-20'>\n <div className='mx-auto max-w-4xl text-center'>\n <EditorialHeading title={title} titleAccent={titleAccent} badge={badge} />\n\n <p className='text-muted-foreground mx-auto mt-6 max-w-2xl text-lg'>{description}</p>\n\n {(primaryCta || secondaryCta) && (\n <div className='mt-8 flex flex-wrap justify-center gap-4'>\n {primaryCta && (\n <CtaButton cta={primaryCta} className='group h-10 cursor-pointer px-4 text-base'>\n {primaryCta.label}\n <ArrowRight className='transition-transform group-hover:translate-x-1' />\n </CtaButton>\n )}\n {secondaryCta && (\n <CtaButton cta={secondaryCta} variant='outline' className='group h-10 cursor-pointer px-4 text-base'>\n {secondaryCta.label}\n </CtaButton>\n )}\n </div>\n )}\n\n {shippingInfo && (\n <div className='mt-6'>\n <div className='bg-background/80 text-muted-foreground inline-flex items-center gap-2 rounded-full px-4 py-1.5 text-sm backdrop-blur-sm'>\n <MapPin className='text-primary size-4' aria-hidden='true' />\n <span>{shippingInfo}</span>\n </div>\n </div>\n )}\n\n {departments.length > 0 && (\n <div className='mt-12 grid grid-cols-3 gap-8'>\n {departments.map(department => {\n const chip = (\n <>\n {department.image && department.image.trim().length > 0 ? (\n <img\n src={department.image}\n alt={department.imageAlt ?? department.name}\n className='bg-card border-border size-16 rounded-full border object-cover'\n loading='lazy'\n />\n ) : null}\n <div>\n <div className='text-lg font-medium'>{department.name}</div>\n {department.count && (\n <div className='text-muted-foreground mt-1 text-sm'>{department.count}</div>\n )}\n </div>\n </>\n )\n\n if (department.href) {\n return (\n <a\n key={department.id}\n href={department.href}\n className={cn(departmentChipClasses, 'cursor-pointer')}\n >\n {chip}\n </a>\n )\n }\n\n return (\n <button\n key={department.id}\n type='button'\n onClick={onDepartmentClick ? () => onDepartmentClick(department) : undefined}\n className={cn(departmentChipClasses, 'cursor-pointer')}\n >\n {chip}\n </button>\n )\n })}\n </div>\n )}\n\n {featuredDeals.length > 0 && (\n <div className='mt-16 grid gap-6 sm:grid-cols-2'>\n {featuredDeals.map(deal => {\n const onSale = hasRealDiscount(deal)\n\n return (\n <Card key={deal.id} className='mx-auto h-full w-full overflow-hidden border-0 py-0 shadow-lg'>\n <CardContent className='p-0'>\n <div className='relative aspect-[3/2] overflow-hidden'>\n {deal.image && deal.image.trim().length > 0 ? (\n <img\n src={deal.image}\n alt={deal.imageAlt ?? deal.name}\n className='size-full object-cover object-center transition-transform duration-700 hover:scale-105'\n loading='lazy'\n />\n ) : null}\n <div className='from-background/90 via-background/30 absolute inset-0 bg-gradient-to-t to-transparent' />\n <div className='absolute inset-0 flex items-end p-8'>\n <div className='w-full'>\n <div className='bg-background/80 flex flex-col items-center justify-between gap-6 rounded-lg p-6 backdrop-blur-sm sm:flex-row sm:gap-8'>\n <div className='text-center sm:text-left'>\n <h3 className='text-2xl font-bold tracking-tight sm:text-3xl'>{deal.name}</h3>\n {deal.description && (\n <p className='text-muted-foreground mt-1'>{deal.description}</p>\n )}\n <div className='mt-2 flex items-baseline justify-center gap-2 sm:justify-start'>\n <span className='text-lg font-bold'>{formatAmount(deal.price, currency)}</span>\n {onSale && (\n <span className='text-muted-foreground text-sm line-through'>\n {formatAmount(deal.originalPrice as number, currency)}\n </span>\n )}\n </div>\n </div>\n {(deal.cta?.href || onShopNow) && (\n <div className='flex-shrink-0'>\n {deal.cta?.href ? (\n <Button size='lg' className='group h-10 cursor-pointer px-4' asChild>\n <a href={deal.cta.href}>\n {deal.cta.label}\n <ArrowRight className='transition-transform group-hover:translate-x-1' />\n </a>\n </Button>\n ) : (\n <Button\n size='lg'\n className='group h-10 cursor-pointer px-4'\n onClick={() => onShopNow?.(deal)}\n >\n {deal.cta?.label ?? labels.shopNowLabel}\n <ArrowRight className='transition-transform group-hover:translate-x-1' />\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n })}\n </div>\n )}\n\n {storeLocator && (\n <div className='border-border/50 bg-background/50 mt-8 rounded-lg border p-6 backdrop-blur-sm'>\n <div className='flex flex-col items-center gap-6 sm:flex-row sm:justify-between'>\n <div className='flex items-center gap-4'>\n <div className='bg-primary/10 text-primary flex size-12 items-center justify-center rounded-full'>\n <MapPin className='size-6' aria-hidden='true' />\n </div>\n <div className='text-start'>\n <h4 className='text-lg font-medium'>{storeLocator.title}</h4>\n <p className='text-muted-foreground'>{storeLocator.description}</p>\n </div>\n </div>\n {(storeLocator.ctaHref || onLocateStores) && (\n <div>\n {storeLocator.ctaHref ? (\n <Button variant='outline' className='h-9 cursor-pointer px-4 py-2 whitespace-nowrap' asChild>\n <a href={storeLocator.ctaHref}>{storeLocator.ctaLabel}</a>\n </Button>\n ) : (\n <Button\n variant='outline'\n className='h-9 cursor-pointer px-4 py-2 whitespace-nowrap'\n onClick={onLocateStores}\n >\n {storeLocator.ctaLabel}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nfunction PromotionalPresentation({\n title,\n description,\n badge,\n titleAccent,\n deals,\n categories,\n rotationInterval,\n labels,\n onShopNow,\n onCategoryClick,\n}: {\n title: string\n description: string\n badge?: string\n titleAccent?: string\n deals: HeroDeal[]\n categories: HeroCategory[]\n rotationInterval: number\n labels: HeroLabels\n onShopNow?: (item: HeroFeaturedDeal | HeroDeal) => void\n onCategoryClick?: (category: HeroCategory) => void\n}) {\n const reduceMotion = useReducedMotion()\n const [currentDeal, setCurrentDeal] = useState(0)\n\n useEffect(() => {\n if (deals.length <= 1 || reduceMotion) return\n\n const interval = setInterval(() => {\n setCurrentDeal(prev => (prev + 1) % deals.length)\n }, rotationInterval)\n\n return () => clearInterval(interval)\n }, [deals.length, reduceMotion, rotationInterval])\n\n const deal = deals[currentDeal]\n\n return (\n <div className='relative'>\n {deal && (\n <header className='bg-primary text-primary-foreground sticky top-0 z-50 shadow-md'>\n <div className='mx-auto w-full max-w-7xl px-4 py-2 sm:px-6 lg:px-8'>\n <div className='flex items-center justify-center'>\n <div className='flex w-full max-w-3xl items-center justify-center gap-4'>\n <div className='flex items-center gap-2'>\n <Badge\n variant='secondary'\n className='bg-primary-foreground text-primary px-2.5 py-0.5 font-semibold'\n >\n {deal.title}\n </Badge>\n {deal.discount && <span className='font-semibold'>{deal.discount}</span>}\n </div>\n {deal.endTime && (\n <span className='hidden sm:inline'>\n {labels.endsInLabel} {deal.endTime}\n </span>\n )}\n {onShopNow && (\n <Button\n variant='link'\n size='sm'\n className='text-primary-foreground hover:text-primary-foreground/80 ml-auto h-8 cursor-pointer px-3 text-xs'\n onClick={() => onShopNow(deal)}\n >\n {labels.shopNowLabel} <ArrowRight />\n </Button>\n )}\n </div>\n </div>\n </div>\n </header>\n )}\n\n <main className='mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8'>\n <div className='mb-12 text-center'>\n {badge && (\n <div className='relative inline-block'>\n <Badge\n variant='outline'\n className='mb-4 flex h-auto items-center rounded-full px-3.5 py-1.5 text-sm font-normal'\n >\n {badge}\n </Badge>\n </div>\n )}\n <h1 className='text-4xl font-bold tracking-tight text-balance sm:text-5xl md:text-6xl'>\n {title}\n {titleAccent && (\n <>\n <br />\n {titleAccent}\n </>\n )}\n </h1>\n <p className='text-muted-foreground mx-auto mt-4 max-w-2xl text-lg'>{description}</p>\n </div>\n\n {categories.length > 0 && (\n <div className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'>\n {categories.map(category => (\n <Card key={category.id} className='group relative overflow-hidden py-0 transition-all duration-500'>\n {category.image && category.image.trim().length > 0 ? (\n <img\n src={category.image}\n alt={category.imageAlt ?? category.name}\n className='aspect-4/5 size-full object-cover grayscale transition-all duration-500 hover:grayscale-0'\n width={400}\n height={500}\n loading='lazy'\n />\n ) : (\n <div className='bg-muted aspect-4/5 size-full' />\n )}\n <CardContent className='absolute inset-x-0 bottom-0 p-4'>\n <div className='mt-1 flex items-center justify-between'>\n <div>\n <h2 className='text-background dark:text-foreground text-lg font-medium'>{category.name}</h2>\n {category.count && (\n <span className='text-background/80 dark:text-foreground/80 text-sm'>\n {category.count} {labels.productsLabel}\n </span>\n )}\n </div>\n {category.href ? (\n <Button\n variant='secondary'\n size='icon'\n className='h-9 w-9 cursor-pointer rounded-full backdrop-blur-xs'\n aria-label={`${labels.viewLabel} ${category.name}`}\n asChild\n >\n <a href={category.href}>\n <ArrowRight />\n </a>\n </Button>\n ) : onCategoryClick ? (\n <Button\n variant='secondary'\n size='icon'\n className='h-9 w-9 cursor-pointer rounded-full backdrop-blur-xs'\n aria-label={`${labels.viewLabel} ${category.name}`}\n onClick={() => onCategoryClick(category)}\n >\n <ArrowRight />\n </Button>\n ) : null}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </main>\n </div>\n )\n}\n\nexport function StorefrontHero({\n title,\n description,\n presentation = 'compact',\n currency,\n products,\n badge,\n titleAccent,\n primaryCta,\n secondaryCta,\n heroImage,\n onSearch,\n departments = [],\n featuredDeals = [],\n storeLocator,\n shippingInfo,\n deals = [],\n categories = [],\n rotationInterval = 3000,\n onAddToCart,\n onBuyNow,\n onSelectColor,\n onDepartmentClick,\n onShopNow,\n onLocateStores,\n onCategoryClick,\n addToCartLabel = 'Agregar al carrito',\n buyNowLabel,\n newLabel = 'Nuevo',\n outOfStockLabel = 'Agotado',\n colorsLabel = 'Colores:',\n discountSuffixLabel = '% OFF',\n searchPlaceholder = 'Buscar productos...',\n searchLabel = 'Buscar',\n featuredDescription,\n shopNowLabel = 'Comprar ahora',\n endsInLabel = 'Termina en',\n productsLabel = 'productos',\n viewLabel = 'Ver',\n}: StorefrontHeroProps) {\n // Presence-based, never label-language based: a host-supplied custom action\n // label is a purchase affordance that must be handler-gated, while the\n // block's own default label is a non-purchase detail affordance that may\n // render without a handler (preserving the accepted default detail).\n const resolvedBuyNowLabel = buyNowLabel ?? 'Ver producto'\n const hasCustomBuyNowLabel = buyNowLabel !== undefined\n const labels: HeroLabels = {\n addToCartLabel,\n buyNowLabel: resolvedBuyNowLabel,\n newLabel,\n outOfStockLabel,\n colorsLabel,\n discountSuffixLabel,\n searchPlaceholder,\n searchLabel,\n featuredDescription,\n shopNowLabel,\n endsInLabel,\n productsLabel,\n viewLabel,\n }\n\n if (presentation === 'showcase') {\n return (\n <ShowcasePresentation\n title={title}\n description={description}\n products={products}\n badge={badge}\n primaryCta={primaryCta}\n secondaryCta={secondaryCta}\n currency={currency}\n labels={labels}\n onSearch={onSearch}\n onBuyNow={onBuyNow}\n rotationInterval={rotationInterval}\n />\n )\n }\n\n if (presentation === 'editorial') {\n return (\n <EditorialPresentation\n title={title}\n description={description}\n badge={badge}\n titleAccent={titleAccent}\n primaryCta={primaryCta}\n secondaryCta={secondaryCta}\n shippingInfo={shippingInfo}\n departments={departments}\n featuredDeals={featuredDeals}\n storeLocator={storeLocator}\n currency={currency}\n labels={labels}\n onDepartmentClick={onDepartmentClick}\n onShopNow={onShopNow}\n onLocateStores={onLocateStores}\n />\n )\n }\n\n if (presentation === 'promotional') {\n return (\n <PromotionalPresentation\n title={title}\n description={description}\n badge={badge}\n titleAccent={titleAccent}\n deals={deals}\n categories={categories}\n rotationInterval={rotationInterval}\n labels={labels}\n onShopNow={onShopNow}\n onCategoryClick={onCategoryClick}\n />\n )\n }\n\n return (\n <CompactPresentation\n title={title}\n description={description}\n products={products}\n badge={badge}\n titleAccent={titleAccent}\n primaryCta={primaryCta}\n secondaryCta={secondaryCta}\n heroImage={heroImage}\n currency={currency}\n labels={labels}\n onAddToCart={onAddToCart}\n onBuyNow={onBuyNow}\n onSelectColor={onSelectColor}\n hasCustomBuyNowLabel={hasCustomBuyNowLabel}\n />\n )\n}\n\nexport default StorefrontHero\n"],"mappings":"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","names":[]}
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ export declare function AvatarGroup({ children, className, overlap, }: {
3
+ children: React.ReactNode;
4
+ className?: string;
5
+ overlap?: string;
6
+ }): React.JSX.Element;
7
+ export default AvatarGroup;
8
+ //# sourceMappingURL=avatar-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-group.d.ts","sourceRoot":"","sources":["../../../../src/blocks/marketing/banners/avatar-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,OAAiB,GAClB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,qBA4CA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var avatar_group_exports = {};
31
+ __export(avatar_group_exports, {
32
+ AvatarGroup: () => AvatarGroup,
33
+ default: () => avatar_group_default
34
+ });
35
+ module.exports = __toCommonJS(avatar_group_exports);
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var React = __toESM(require("react"));
38
+ var import_react = require("react");
39
+ var import_utils = require("../../../lib/utils.js");
40
+ const LIFT = -4;
41
+ const FALLOFF = 0.45;
42
+ const ACTIVE_SCALE = 1.05;
43
+ const DURATION = 320;
44
+ const EASE_IN = "cubic-bezier(0.22, 1, 0.36, 1)";
45
+ const EASE_OUT = "cubic-bezier(0.34, 3.85, 0.64, 1)";
46
+ function AvatarGroup({
47
+ children,
48
+ className,
49
+ overlap = "-ml-2"
50
+ }) {
51
+ const items = React.Children.toArray(children);
52
+ const [activeIndex, setActiveIndex] = (0, import_react.useState)(null);
53
+ const [reducedMotion, setReducedMotion] = (0, import_react.useState)(false);
54
+ (0, import_react.useEffect)(() => {
55
+ const query = window.matchMedia("(prefers-reduced-motion: reduce)");
56
+ const sync = () => setReducedMotion(query.matches);
57
+ sync();
58
+ query.addEventListener("change", sync);
59
+ return () => query.removeEventListener("change", sync);
60
+ }, []);
61
+ const itemStyle = (index) => {
62
+ if (reducedMotion) {
63
+ return void 0;
64
+ }
65
+ const isActive = index === activeIndex;
66
+ const shift = activeIndex === null ? 0 : LIFT * FALLOFF ** Math.abs(index - activeIndex);
67
+ return {
68
+ transform: `translateY(${shift.toFixed(3)}px) scale(${isActive ? ACTIVE_SCALE : 1})`,
69
+ transition: `transform ${DURATION}ms ${activeIndex === null ? EASE_OUT : EASE_IN}`,
70
+ willChange: "transform",
71
+ zIndex: isActive ? 1 : void 0
72
+ };
73
+ };
74
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_utils.cn)("flex", className), onMouseLeave: () => setActiveIndex(null), children: items.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
+ "div",
76
+ {
77
+ className: (0, import_utils.cn)("relative", index > 0 && overlap),
78
+ style: itemStyle(index),
79
+ onMouseEnter: () => setActiveIndex(index),
80
+ children: child
81
+ },
82
+ index
83
+ )) });
84
+ }
85
+ var avatar_group_default = AvatarGroup;
86
+ // Annotate the CommonJS export names for ESM import in node:
87
+ 0 && (module.exports = {
88
+ AvatarGroup
89
+ });
90
+ //# sourceMappingURL=avatar-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/marketing/banners/avatar-group.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst LIFT = -4\nconst FALLOFF = 0.45\nconst ACTIVE_SCALE = 1.05\nconst DURATION = 320\nconst EASE_IN = 'cubic-bezier(0.22, 1, 0.36, 1)'\nconst EASE_OUT = 'cubic-bezier(0.34, 3.85, 0.64, 1)'\n\nexport function AvatarGroup({\n children,\n className,\n overlap = '-ml-2',\n}: {\n children: React.ReactNode\n className?: string\n overlap?: string\n}) {\n const items = React.Children.toArray(children)\n const [activeIndex, setActiveIndex] = useState<number | null>(null)\n const [reducedMotion, setReducedMotion] = useState(false)\n\n useEffect(() => {\n const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n const sync = () => setReducedMotion(query.matches)\n\n sync()\n query.addEventListener('change', sync)\n return () => query.removeEventListener('change', sync)\n }, [])\n\n const itemStyle = (index: number): React.CSSProperties | undefined => {\n if (reducedMotion) {\n return undefined\n }\n\n const isActive = index === activeIndex\n const shift = activeIndex === null ? 0 : LIFT * FALLOFF ** Math.abs(index - activeIndex)\n\n return {\n transform: `translateY(${shift.toFixed(3)}px) scale(${isActive ? ACTIVE_SCALE : 1})`,\n transition: `transform ${DURATION}ms ${activeIndex === null ? EASE_OUT : EASE_IN}`,\n willChange: 'transform',\n zIndex: isActive ? 1 : undefined,\n }\n }\n\n return (\n <div className={cn('flex', className)} onMouseLeave={() => setActiveIndex(null)}>\n {items.map((child, index) => (\n <div\n key={index}\n className={cn('relative', index > 0 && overlap)}\n style={itemStyle(index)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nexport default AvatarGroup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDQ;AArDR,YAAuB;AACvB,mBAAoC;AAEpC,mBAAmB;AAEnB,MAAM,OAAO;AACb,MAAM,UAAU;AAChB,MAAM,eAAe;AACrB,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,WAAW;AAEV,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAIG;AACD,QAAM,QAAQ,MAAM,SAAS,QAAQ,QAAQ;AAC7C,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAwB,IAAI;AAClE,QAAM,CAAC,eAAe,gBAAgB,QAAI,uBAAS,KAAK;AAExD,8BAAU,MAAM;AACd,UAAM,QAAQ,OAAO,WAAW,kCAAkC;AAClE,UAAM,OAAO,MAAM,iBAAiB,MAAM,OAAO;AAEjD,SAAK;AACL,UAAM,iBAAiB,UAAU,IAAI;AACrC,WAAO,MAAM,MAAM,oBAAoB,UAAU,IAAI;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,CAAC,UAAmD;AACpE,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,UAAU;AAC3B,UAAM,QAAQ,gBAAgB,OAAO,IAAI,OAAO,WAAW,KAAK,IAAI,QAAQ,WAAW;AAEvF,WAAO;AAAA,MACL,WAAW,cAAc,MAAM,QAAQ,CAAC,CAAC,aAAa,WAAW,eAAe,CAAC;AAAA,MACjF,YAAY,aAAa,QAAQ,MAAM,gBAAgB,OAAO,WAAW,OAAO;AAAA,MAChF,YAAY;AAAA,MACZ,QAAQ,WAAW,IAAI;AAAA,IACzB;AAAA,EACF;AAEA,SACE,4CAAC,SAAI,eAAW,iBAAG,QAAQ,SAAS,GAAG,cAAc,MAAM,eAAe,IAAI,GAC3E,gBAAM,IAAI,CAAC,OAAO,UACjB;AAAA,IAAC;AAAA;AAAA,MAEC,eAAW,iBAAG,YAAY,QAAQ,KAAK,OAAO;AAAA,MAC9C,OAAO,UAAU,KAAK;AAAA,MACtB,cAAc,MAAM,eAAe,KAAK;AAAA,MAEvC;AAAA;AAAA,IALI;AAAA,EAMP,CACD,GACH;AAEJ;AAEA,IAAO,uBAAQ;","names":[]}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useEffect, useState } from "react";
5
+ import { cn } from "../../../lib/utils.mjs";
6
+ const LIFT = -4;
7
+ const FALLOFF = 0.45;
8
+ const ACTIVE_SCALE = 1.05;
9
+ const DURATION = 320;
10
+ const EASE_IN = "cubic-bezier(0.22, 1, 0.36, 1)";
11
+ const EASE_OUT = "cubic-bezier(0.34, 3.85, 0.64, 1)";
12
+ function AvatarGroup({
13
+ children,
14
+ className,
15
+ overlap = "-ml-2"
16
+ }) {
17
+ const items = React.Children.toArray(children);
18
+ const [activeIndex, setActiveIndex] = useState(null);
19
+ const [reducedMotion, setReducedMotion] = useState(false);
20
+ useEffect(() => {
21
+ const query = window.matchMedia("(prefers-reduced-motion: reduce)");
22
+ const sync = () => setReducedMotion(query.matches);
23
+ sync();
24
+ query.addEventListener("change", sync);
25
+ return () => query.removeEventListener("change", sync);
26
+ }, []);
27
+ const itemStyle = (index) => {
28
+ if (reducedMotion) {
29
+ return void 0;
30
+ }
31
+ const isActive = index === activeIndex;
32
+ const shift = activeIndex === null ? 0 : LIFT * FALLOFF ** Math.abs(index - activeIndex);
33
+ return {
34
+ transform: `translateY(${shift.toFixed(3)}px) scale(${isActive ? ACTIVE_SCALE : 1})`,
35
+ transition: `transform ${DURATION}ms ${activeIndex === null ? EASE_OUT : EASE_IN}`,
36
+ willChange: "transform",
37
+ zIndex: isActive ? 1 : void 0
38
+ };
39
+ };
40
+ return /* @__PURE__ */ jsx("div", { className: cn("flex", className), onMouseLeave: () => setActiveIndex(null), children: items.map((child, index) => /* @__PURE__ */ jsx(
41
+ "div",
42
+ {
43
+ className: cn("relative", index > 0 && overlap),
44
+ style: itemStyle(index),
45
+ onMouseEnter: () => setActiveIndex(index),
46
+ children: child
47
+ },
48
+ index
49
+ )) });
50
+ }
51
+ var avatar_group_default = AvatarGroup;
52
+ export {
53
+ AvatarGroup,
54
+ avatar_group_default as default
55
+ };
56
+ //# sourceMappingURL=avatar-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/marketing/banners/avatar-group.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst LIFT = -4\nconst FALLOFF = 0.45\nconst ACTIVE_SCALE = 1.05\nconst DURATION = 320\nconst EASE_IN = 'cubic-bezier(0.22, 1, 0.36, 1)'\nconst EASE_OUT = 'cubic-bezier(0.34, 3.85, 0.64, 1)'\n\nexport function AvatarGroup({\n children,\n className,\n overlap = '-ml-2',\n}: {\n children: React.ReactNode\n className?: string\n overlap?: string\n}) {\n const items = React.Children.toArray(children)\n const [activeIndex, setActiveIndex] = useState<number | null>(null)\n const [reducedMotion, setReducedMotion] = useState(false)\n\n useEffect(() => {\n const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n const sync = () => setReducedMotion(query.matches)\n\n sync()\n query.addEventListener('change', sync)\n return () => query.removeEventListener('change', sync)\n }, [])\n\n const itemStyle = (index: number): React.CSSProperties | undefined => {\n if (reducedMotion) {\n return undefined\n }\n\n const isActive = index === activeIndex\n const shift = activeIndex === null ? 0 : LIFT * FALLOFF ** Math.abs(index - activeIndex)\n\n return {\n transform: `translateY(${shift.toFixed(3)}px) scale(${isActive ? ACTIVE_SCALE : 1})`,\n transition: `transform ${DURATION}ms ${activeIndex === null ? EASE_OUT : EASE_IN}`,\n willChange: 'transform',\n zIndex: isActive ? 1 : undefined,\n }\n }\n\n return (\n <div className={cn('flex', className)} onMouseLeave={() => setActiveIndex(null)}>\n {items.map((child, index) => (\n <div\n key={index}\n className={cn('relative', index > 0 && overlap)}\n style={itemStyle(index)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nexport default AvatarGroup"],"mappings":";AAuDQ;AArDR,YAAY,WAAW;AACvB,SAAS,WAAW,gBAAgB;AAEpC,SAAS,UAAU;AAEnB,MAAM,OAAO;AACb,MAAM,UAAU;AAChB,MAAM,eAAe;AACrB,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,WAAW;AAEV,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAIG;AACD,QAAM,QAAQ,MAAM,SAAS,QAAQ,QAAQ;AAC7C,QAAM,CAAC,aAAa,cAAc,IAAI,SAAwB,IAAI;AAClE,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AAExD,YAAU,MAAM;AACd,UAAM,QAAQ,OAAO,WAAW,kCAAkC;AAClE,UAAM,OAAO,MAAM,iBAAiB,MAAM,OAAO;AAEjD,SAAK;AACL,UAAM,iBAAiB,UAAU,IAAI;AACrC,WAAO,MAAM,MAAM,oBAAoB,UAAU,IAAI;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,CAAC,UAAmD;AACpE,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,UAAU;AAC3B,UAAM,QAAQ,gBAAgB,OAAO,IAAI,OAAO,WAAW,KAAK,IAAI,QAAQ,WAAW;AAEvF,WAAO;AAAA,MACL,WAAW,cAAc,MAAM,QAAQ,CAAC,CAAC,aAAa,WAAW,eAAe,CAAC;AAAA,MACjF,YAAY,aAAa,QAAQ,MAAM,gBAAgB,OAAO,WAAW,OAAO;AAAA,MAChF,YAAY;AAAA,MACZ,QAAQ,WAAW,IAAI;AAAA,IACzB;AAAA,EACF;AAEA,SACE,oBAAC,SAAI,WAAW,GAAG,QAAQ,SAAS,GAAG,cAAc,MAAM,eAAe,IAAI,GAC3E,gBAAM,IAAI,CAAC,OAAO,UACjB;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,GAAG,YAAY,QAAQ,KAAK,OAAO;AAAA,MAC9C,OAAO,UAAU,KAAK;AAAA,MACtB,cAAc,MAAM,eAAe,KAAK;AAAA,MAEvC;AAAA;AAAA,IALI;AAAA,EAMP,CACD,GACH;AAEJ;AAEA,IAAO,uBAAQ;","names":[]}
@@ -0,0 +1,26 @@
1
+ export type Banner1Shape = 'bar' | 'pill';
2
+ export interface Banner1Props {
3
+ /**
4
+ * 'bar' — full-width strip above the header (the default).
5
+ * 'pill' — floating rounded card pinned to the bottom of the viewport, with an avatar stack.
6
+ */
7
+ shape?: Banner1Shape;
8
+ badge?: string;
9
+ message: string;
10
+ href: string;
11
+ linkLabel: string;
12
+ /** Used by the 'pill' shape only; decorative avatars of the announcement's authors. */
13
+ avatars?: string[];
14
+ /**
15
+ * 'bar' only. When true, the inner content spans the full width of its parent
16
+ * (skips the centered `max-w-7xl` container) so badge/message/CTA reach the edges.
17
+ */
18
+ fullWidth?: boolean;
19
+ /** Fired when the user clicks the banner CTA. When provided, the CTA renders as a button instead of a link. */
20
+ onCtaClick?: () => void;
21
+ /** Fired when the user dismisses the banner. */
22
+ onDismiss?: () => void;
23
+ }
24
+ export declare function Banner1({ shape, badge, message, href, linkLabel, avatars, fullWidth, onCtaClick, onDismiss, }: Banner1Props): import("react").JSX.Element | null;
25
+ export default Banner1;
26
+ //# sourceMappingURL=banner-1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner-1.d.ts","sourceRoot":"","sources":["../../../../src/blocks/marketing/banners/banner-1.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAA;AAEzC,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+GAA+G;IAC/G,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAID,wBAAgB,OAAO,CAAC,EACtB,KAAa,EACb,KAAK,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,SAAS,GACV,EAAE,YAAY,sCA0Id;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var banner_1_exports = {};
21
+ __export(banner_1_exports, {
22
+ Banner1: () => Banner1,
23
+ default: () => banner_1_default
24
+ });
25
+ module.exports = __toCommonJS(banner_1_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_react = require("react");
28
+ var import_react2 = require("motion/react");
29
+ var import_lucide_react = require("lucide-react");
30
+ var import_avatar = require("../../../ui/avatar.js");
31
+ var import_badge = require("../../../ui/badge.js");
32
+ var import_button = require("../../../ui/button.js");
33
+ var import_avatar_group = require("./avatar-group.js");
34
+ function Banner1({
35
+ shape = "bar",
36
+ badge,
37
+ message,
38
+ href,
39
+ linkLabel,
40
+ avatars,
41
+ fullWidth,
42
+ onCtaClick,
43
+ onDismiss
44
+ }) {
45
+ const [visibility, setVisibility] = (0, import_react.useState)("visible");
46
+ const reduceMotion = (0, import_react2.useReducedMotion)();
47
+ (0, import_react.useEffect)(() => {
48
+ if (visibility !== "closing") {
49
+ return;
50
+ }
51
+ const timer = window.setTimeout(() => setVisibility("closed"), 200);
52
+ return () => window.clearTimeout(timer);
53
+ }, [visibility]);
54
+ const dismiss = () => {
55
+ onDismiss?.();
56
+ setVisibility(reduceMotion ? "closed" : "closing");
57
+ };
58
+ if (visibility === "closed") {
59
+ return null;
60
+ }
61
+ const closing = visibility === "closing";
62
+ if (shape === "pill") {
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ "div",
65
+ {
66
+ className: `fixed inset-x-4 bottom-4 z-50 transition-all duration-200 ease-out motion-reduce:transition-none sm:inset-x-auto sm:left-1/2 sm:-translate-x-1/2 ${closing ? "translate-y-2 opacity-0" : "opacity-100"}`,
67
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bg-background/95 border-border flex items-center gap-3 rounded-full border py-2 pr-2 pl-3 shadow-lg backdrop-blur sm:pl-4", children: [
68
+ avatars && avatars.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_avatar_group.AvatarGroup, { "aria-hidden": "true", children: avatars.map((src) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_avatar.Avatar, { className: "ring-background size-6 ring-2", children: [
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_avatar.AvatarImage, { src: src || void 0, alt: "" }),
70
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_avatar.AvatarFallback, {})
71
+ ] }, src)) }),
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "truncate text-sm", children: message }),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
74
+ "a",
75
+ {
76
+ href,
77
+ className: "hover:text-foreground text-muted-foreground focus-visible:ring-ring hidden shrink-0 items-center gap-1 rounded-sm text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none sm:inline-flex",
78
+ children: [
79
+ linkLabel,
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "size-3.5" })
81
+ ]
82
+ }
83
+ ),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ import_button.Button,
86
+ {
87
+ variant: "ghost",
88
+ size: "icon",
89
+ className: "size-8 shrink-0 rounded-full",
90
+ "aria-label": "Dismiss announcement",
91
+ onClick: dismiss,
92
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { className: "size-4" })
93
+ }
94
+ )
95
+ ] })
96
+ }
97
+ );
98
+ }
99
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
100
+ "div",
101
+ {
102
+ className: `grid transition-all duration-200 ease-out motion-reduce:transition-none ${closing ? "grid-rows-[0fr] opacity-0" : "grid-rows-[1fr] opacity-100"}`,
103
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "bg-primary text-primary-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
104
+ "div",
105
+ {
106
+ className: `flex w-full items-center gap-3 px-4 py-2.5 sm:px-6 lg:px-8 ${fullWidth ? "" : "mx-auto max-w-7xl"}`,
107
+ children: [
108
+ badge ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
109
+ import_badge.Badge,
110
+ {
111
+ variant: "secondary",
112
+ className: "hidden shrink-0 rounded-full px-2 py-0 text-xs font-semibold sm:inline-flex",
113
+ children: badge
114
+ }
115
+ ) : null,
116
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "min-w-0 flex-1 truncate text-sm", children: message }),
117
+ onCtaClick ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "relative inline-flex", children: [
118
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
119
+ import_react2.motion.span,
120
+ {
121
+ "aria-hidden": "true",
122
+ className: "pointer-events-none absolute inset-0 rounded-md ring-2 ring-background/70",
123
+ initial: { scale: 1, opacity: 0.7 },
124
+ animate: reduceMotion ? { scale: 1, opacity: 0 } : { scale: [1, 1.35], opacity: [0.7, 0] },
125
+ transition: { duration: 1.8, repeat: Infinity, ease: "easeOut", repeatDelay: 0.4 }
126
+ }
127
+ ),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
129
+ import_button.Button,
130
+ {
131
+ type: "button",
132
+ variant: "secondary",
133
+ size: "sm",
134
+ onClick: onCtaClick,
135
+ className: "shrink-0",
136
+ children: [
137
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "hidden sm:inline", children: linkLabel }),
138
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sr-only sm:hidden", children: linkLabel }),
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "size-3.5", "aria-hidden": "true" })
140
+ ]
141
+ }
142
+ )
143
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
144
+ "a",
145
+ {
146
+ href,
147
+ className: "focus-visible:ring-ring inline-flex shrink-0 items-center gap-1 rounded-sm text-sm font-medium underline-offset-4 transition-opacity duration-150 hover:opacity-80 hover:underline focus-visible:ring-2 focus-visible:outline-none",
148
+ children: [
149
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "hidden sm:inline", children: linkLabel }),
150
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sr-only sm:hidden", children: linkLabel }),
151
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "size-3.5", "aria-hidden": "true" })
152
+ ]
153
+ }
154
+ ),
155
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
156
+ import_button.Button,
157
+ {
158
+ variant: "ghost",
159
+ size: "icon",
160
+ className: "hover:bg-primary-foreground/10 hover:text-primary-foreground size-8 shrink-0",
161
+ "aria-label": "Dismiss announcement",
162
+ onClick: dismiss,
163
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { className: "size-4" })
164
+ }
165
+ )
166
+ ]
167
+ }
168
+ ) }) })
169
+ }
170
+ );
171
+ }
172
+ var banner_1_default = Banner1;
173
+ // Annotate the CommonJS export names for ESM import in node:
174
+ 0 && (module.exports = {
175
+ Banner1
176
+ });
177
+ //# sourceMappingURL=banner-1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/marketing/banners/banner-1.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\nimport { ArrowRight, X } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage } from '../../../ui/avatar'\nimport { Badge } from '../../../ui/badge'\nimport { Button } from '../../../ui/button'\nimport { AvatarGroup } from './avatar-group'\n\nexport type Banner1Shape = 'bar' | 'pill'\n\nexport interface Banner1Props {\n /**\n * 'bar' — full-width strip above the header (the default).\n * 'pill' — floating rounded card pinned to the bottom of the viewport, with an avatar stack.\n */\n shape?: Banner1Shape\n badge?: string\n message: string\n href: string\n linkLabel: string\n /** Used by the 'pill' shape only; decorative avatars of the announcement's authors. */\n avatars?: string[]\n /**\n * 'bar' only. When true, the inner content spans the full width of its parent\n * (skips the centered `max-w-7xl` container) so badge/message/CTA reach the edges.\n */\n fullWidth?: boolean\n /** Fired when the user clicks the banner CTA. When provided, the CTA renders as a button instead of a link. */\n onCtaClick?: () => void\n /** Fired when the user dismisses the banner. */\n onDismiss?: () => void\n}\n\ntype Visibility = 'visible' | 'closing' | 'closed'\n\nexport function Banner1({\n shape = 'bar',\n badge,\n message,\n href,\n linkLabel,\n avatars,\n fullWidth,\n onCtaClick,\n onDismiss,\n}: Banner1Props) {\n const [visibility, setVisibility] = useState<Visibility>('visible')\n const reduceMotion = useReducedMotion()\n\n useEffect(() => {\n if (visibility !== 'closing') {\n return\n }\n\n const timer = window.setTimeout(() => setVisibility('closed'), 200)\n return () => window.clearTimeout(timer)\n }, [visibility])\n\n const dismiss = () => {\n onDismiss?.()\n setVisibility(reduceMotion ? 'closed' : 'closing')\n }\n\n if (visibility === 'closed') {\n return null\n }\n\n const closing = visibility === 'closing'\n\n if (shape === 'pill') {\n return (\n <div\n className={`fixed inset-x-4 bottom-4 z-50 transition-all duration-200 ease-out motion-reduce:transition-none sm:inset-x-auto sm:left-1/2 sm:-translate-x-1/2 ${\n closing ? 'translate-y-2 opacity-0' : 'opacity-100'\n }`}\n >\n <div className='bg-background/95 border-border flex items-center gap-3 rounded-full border py-2 pr-2 pl-3 shadow-lg backdrop-blur sm:pl-4'>\n {avatars && avatars.length > 0 && (\n <AvatarGroup aria-hidden='true'>\n {avatars.map(src => (\n <Avatar key={src} className='ring-background size-6 ring-2'>\n <AvatarImage src={src || undefined} alt='' />\n <AvatarFallback />\n </Avatar>\n ))}\n </AvatarGroup>\n )}\n <p className='truncate text-sm'>{message}</p>\n <a\n href={href}\n className='hover:text-foreground text-muted-foreground focus-visible:ring-ring hidden shrink-0 items-center gap-1 rounded-sm text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none sm:inline-flex'\n >\n {linkLabel}\n <ArrowRight className='size-3.5' />\n </a>\n <Button\n variant='ghost'\n size='icon'\n className='size-8 shrink-0 rounded-full'\n aria-label='Dismiss announcement'\n onClick={dismiss}\n >\n <X className='size-4' />\n </Button>\n </div>\n </div>\n )\n }\n\n return (\n <div\n className={`grid transition-all duration-200 ease-out motion-reduce:transition-none ${\n closing ? 'grid-rows-[0fr] opacity-0' : 'grid-rows-[1fr] opacity-100'\n }`}\n >\n <div className='overflow-hidden'>\n <div className='bg-primary text-primary-foreground'>\n <div\n className={`flex w-full items-center gap-3 px-4 py-2.5 sm:px-6 lg:px-8 ${\n fullWidth ? '' : 'mx-auto max-w-7xl'\n }`}\n >\n {badge ? (\n <Badge\n variant='secondary'\n className='hidden shrink-0 rounded-full px-2 py-0 text-xs font-semibold sm:inline-flex'\n >\n {badge}\n </Badge>\n ) : null}\n\n <p className='min-w-0 flex-1 truncate text-sm'>{message}</p>\n\n {onCtaClick ? (\n <span className='relative inline-flex'>\n <motion.span\n aria-hidden='true'\n className='pointer-events-none absolute inset-0 rounded-md ring-2 ring-background/70'\n initial={{ scale: 1, opacity: 0.7 }}\n animate={\n reduceMotion\n ? { scale: 1, opacity: 0 }\n : { scale: [1, 1.35], opacity: [0.7, 0] }\n }\n transition={{ duration: 1.8, repeat: Infinity, ease: 'easeOut', repeatDelay: 0.4 }}\n />\n <Button\n type='button'\n variant='secondary'\n size='sm'\n onClick={onCtaClick}\n className='shrink-0'\n >\n <span className='hidden sm:inline'>{linkLabel}</span>\n <span className='sr-only sm:hidden'>{linkLabel}</span>\n <ArrowRight className='size-3.5' aria-hidden='true' />\n </Button>\n </span>\n ) : (\n <a\n href={href}\n className='focus-visible:ring-ring inline-flex shrink-0 items-center gap-1 rounded-sm text-sm font-medium underline-offset-4 transition-opacity duration-150 hover:opacity-80 hover:underline focus-visible:ring-2 focus-visible:outline-none'\n >\n <span className='hidden sm:inline'>{linkLabel}</span>\n <span className='sr-only sm:hidden'>{linkLabel}</span>\n <ArrowRight className='size-3.5' aria-hidden='true' />\n </a>\n )}\n\n <Button\n variant='ghost'\n size='icon'\n className='hover:bg-primary-foreground/10 hover:text-primary-foreground size-8 shrink-0'\n aria-label='Dismiss announcement'\n onClick={dismiss}\n >\n <X className='size-4' />\n </Button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default Banner1"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkFgB;AAhFhB,mBAAoC;AACpC,IAAAA,gBAAyC;AACzC,0BAA8B;AAC9B,oBAAoD;AACpD,mBAAsB;AACtB,oBAAuB;AACvB,0BAA4B;AA6BrB,SAAS,QAAQ;AAAA,EACtB,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAqB,SAAS;AAClE,QAAM,mBAAe,gCAAiB;AAEtC,8BAAU,MAAM;AACd,QAAI,eAAe,WAAW;AAC5B;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,WAAW,MAAM,cAAc,QAAQ,GAAG,GAAG;AAClE,WAAO,MAAM,OAAO,aAAa,KAAK;AAAA,EACxC,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,UAAU,MAAM;AACpB,gBAAY;AACZ,kBAAc,eAAe,WAAW,SAAS;AAAA,EACnD;AAEA,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,eAAe;AAE/B,MAAI,UAAU,QAAQ;AACpB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,oJACT,UAAU,4BAA4B,aACxC;AAAA,QAEA,uDAAC,SAAI,WAAU,6HACZ;AAAA,qBAAW,QAAQ,SAAS,KAC3B,4CAAC,mCAAY,eAAY,QACtB,kBAAQ,IAAI,SACX,6CAAC,wBAAiB,WAAU,iCAC1B;AAAA,wDAAC,6BAAY,KAAK,OAAO,QAAW,KAAI,IAAG;AAAA,YAC3C,4CAAC,gCAAe;AAAA,eAFL,GAGb,CACD,GACH;AAAA,UAEF,4CAAC,OAAE,WAAU,oBAAoB,mBAAQ;AAAA,UACzC;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cAET;AAAA;AAAA,gBACD,4CAAC,kCAAW,WAAU,YAAW;AAAA;AAAA;AAAA,UACnC;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAW;AAAA,cACX,SAAS;AAAA,cAET,sDAAC,yBAAE,WAAU,UAAS;AAAA;AAAA,UACxB;AAAA,WACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,2EACT,UAAU,8BAA8B,6BAC1C;AAAA,MAEA,sDAAC,SAAI,WAAU,mBACb,sDAAC,SAAI,WAAU,sCACb;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,8DACT,YAAY,KAAK,mBACnB;AAAA,UAEC;AAAA,oBACC;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,WAAU;AAAA,gBAET;AAAA;AAAA,YACH,IACE;AAAA,YAEJ,4CAAC,OAAE,WAAU,mCAAmC,mBAAQ;AAAA,YAEvD,aACC,6CAAC,UAAK,WAAU,wBACd;AAAA;AAAA,gBAAC,qBAAO;AAAA,gBAAP;AAAA,kBACC,eAAY;AAAA,kBACZ,WAAU;AAAA,kBACV,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI;AAAA,kBAClC,SACE,eACI,EAAE,OAAO,GAAG,SAAS,EAAE,IACvB,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE;AAAA,kBAE5C,YAAY,EAAE,UAAU,KAAK,QAAQ,UAAU,MAAM,WAAW,aAAa,IAAI;AAAA;AAAA,cACnF;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,WAAU;AAAA,kBAEV;AAAA,gEAAC,UAAK,WAAU,oBAAoB,qBAAU;AAAA,oBAC9C,4CAAC,UAAK,WAAU,qBAAqB,qBAAU;AAAA,oBAC/C,4CAAC,kCAAW,WAAU,YAAW,eAAY,QAAO;AAAA;AAAA;AAAA,cACtD;AAAA,eACF,IAEA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,WAAU;AAAA,gBAEV;AAAA,8DAAC,UAAK,WAAU,oBAAoB,qBAAU;AAAA,kBAC9C,4CAAC,UAAK,WAAU,qBAAqB,qBAAU;AAAA,kBAC/C,4CAAC,kCAAW,WAAU,YAAW,eAAY,QAAO;AAAA;AAAA;AAAA,YACtD;AAAA,YAGF;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,cAAW;AAAA,gBACX,SAAS;AAAA,gBAET,sDAAC,yBAAE,WAAU,UAAS;AAAA;AAAA,YACxB;AAAA;AAAA;AAAA,MACF,GACF,GACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,mBAAQ;","names":["import_react"]}