@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/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":["import_react"]}
@@ -0,0 +1,399 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef, useState } from "react";
4
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
5
+ import { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from "lucide-react";
6
+ import { Button } from "../../../ui/button.mjs";
7
+ import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "../../../ui/sheet.mjs";
8
+ import { cn } from "../../../lib/utils.mjs";
9
+ import { StorefrontNavbarAccountMenu } from "./storefront-navbar-account-menu.mjs";
10
+ import { StorefrontNavbarCartSheet } from "./storefront-navbar-cart-sheet.mjs";
11
+ import { StorefrontNavbarSearchBar } from "./storefront-navbar-search-bar.mjs";
12
+ import { MegaMenu } from "./mega-menu.mjs";
13
+ import { MobileCategoryDrawer } from "./mobile-category-drawer.mjs";
14
+ function toMenuItem(category) {
15
+ return {
16
+ id: category.href,
17
+ label: category.label,
18
+ href: category.href,
19
+ children: category.children?.map(toMenuItem)
20
+ };
21
+ }
22
+ function uniqueById(items) {
23
+ const seen = /* @__PURE__ */ new Set();
24
+ return items.filter((item) => {
25
+ if (seen.has(item.id)) return false;
26
+ seen.add(item.id);
27
+ return true;
28
+ });
29
+ }
30
+ function Logo({ text, href, accent }) {
31
+ const className = "focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none";
32
+ const accentText = accent?.text ?? "";
33
+ const hasAccent = accentText.length > 0 && text.endsWith(accentText);
34
+ const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text;
35
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 32 32", "aria-hidden": "true", className: "text-primary size-7", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
37
+ /* @__PURE__ */ jsx(
38
+ "path",
39
+ {
40
+ d: "M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z",
41
+ fill: "currentColor"
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsx(
45
+ "path",
46
+ {
47
+ d: "M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z",
48
+ fill: "currentColor"
49
+ }
50
+ ),
51
+ /* @__PURE__ */ jsx(
52
+ "path",
53
+ {
54
+ d: "M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z",
55
+ fill: "currentColor"
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsx(
59
+ "path",
60
+ {
61
+ d: "M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z",
62
+ fill: "currentColor"
63
+ }
64
+ ),
65
+ /* @__PURE__ */ jsx(
66
+ "path",
67
+ {
68
+ d: "M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z",
69
+ fill: "currentColor"
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx("path", { d: "M21.1694 10.5806L14.5651 17.1849", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
73
+ /* @__PURE__ */ jsx("path", { d: "M22.1694 14.5806L18.5632 18.1868", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }),
74
+ /* @__PURE__ */ jsx("circle", { cx: "13.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" }),
75
+ /* @__PURE__ */ jsx("circle", { cx: "22.1", cy: "26.1", r: "1.7", stroke: "currentColor", strokeWidth: "1.2" })
76
+ ] }),
77
+ /* @__PURE__ */ jsxs("span", { className: "text-base font-semibold tracking-tight", children: [
78
+ baseText,
79
+ hasAccent ? /* @__PURE__ */ jsx("span", { className: accent?.className, children: accentText }) : null
80
+ ] })
81
+ ] });
82
+ if (!href) {
83
+ return /* @__PURE__ */ jsx("span", { className, children: content });
84
+ }
85
+ return /* @__PURE__ */ jsx("a", { href, className, children: content });
86
+ }
87
+ function CartBadge({ count }) {
88
+ const reduceMotion = useReducedMotion();
89
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: count > 0 ? /* @__PURE__ */ jsx(
90
+ motion.span,
91
+ {
92
+ className: "bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background",
93
+ initial: reduceMotion ? false : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: "blur(2px)" },
94
+ animate: { scale: 1, x: 0, y: 0, opacity: 1, filter: "blur(0px)" },
95
+ exit: reduceMotion ? { opacity: 0 } : {
96
+ scale: 0,
97
+ opacity: 0,
98
+ filter: "blur(2px)",
99
+ transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] }
100
+ },
101
+ transition: reduceMotion ? { duration: 0 } : { type: "spring", stiffness: 520, damping: 18, mass: 0.6 },
102
+ style: { willChange: "transform, opacity, filter" },
103
+ children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: /* @__PURE__ */ jsx(
104
+ motion.span,
105
+ {
106
+ className: "block",
107
+ initial: reduceMotion ? false : { y: 8, opacity: 0, filter: "blur(2px)" },
108
+ animate: { y: 0, opacity: 1, filter: "blur(0px)" },
109
+ exit: reduceMotion ? void 0 : { y: -8, opacity: 0, filter: "blur(2px)" },
110
+ transition: { duration: 0.22, ease: [0.22, 1, 0.36, 1] },
111
+ children: count > 99 ? "99+" : count
112
+ },
113
+ count
114
+ ) })
115
+ },
116
+ "badge-shell"
117
+ ) : null });
118
+ }
119
+ function StorefrontNavbarAccountRetry({ pending = false, onRetry }) {
120
+ return /* @__PURE__ */ jsx(
121
+ Button,
122
+ {
123
+ variant: "ghost",
124
+ size: "icon",
125
+ className: "size-11",
126
+ disabled: pending || !onRetry,
127
+ "aria-label": "Retry account session",
128
+ title: "Account session unavailable",
129
+ onClick: onRetry,
130
+ children: /* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": "true" })
131
+ }
132
+ );
133
+ }
134
+ function StorefrontNavbar({
135
+ storeCategories,
136
+ shippingNote = "",
137
+ utilityLinks,
138
+ logoText,
139
+ logoHref,
140
+ logoAccent,
141
+ accountHref,
142
+ currentPath,
143
+ showSearch = true,
144
+ searchQuery: searchQueryProp,
145
+ onSearchChange,
146
+ items: itemsProp,
147
+ onQtyChange: onQtyChangeProp,
148
+ onRemove: onRemoveProp,
149
+ subtotal,
150
+ subtotalUnavailableLabel,
151
+ formatMoney,
152
+ user,
153
+ accountMenuItems,
154
+ onHelp,
155
+ onSignOut,
156
+ accountPending = false,
157
+ accountUnavailable = false,
158
+ onAccountRetry,
159
+ onCheckout,
160
+ onViewCart,
161
+ cartOpen,
162
+ onCartOpenChange,
163
+ canonicalCart,
164
+ cartState,
165
+ cartErrorLabel,
166
+ cartRetryLabel,
167
+ onCartRetry,
168
+ checkoutUnavailable,
169
+ checkoutDisabled,
170
+ viewCartUnavailable,
171
+ className
172
+ }) {
173
+ const [internalItems, setInternalItems] = useState([]);
174
+ const [internalSearch, setInternalSearch] = useState("");
175
+ const [searchOpen, setSearchOpen] = useState(false);
176
+ const [menuOpen, setMenuOpen] = useState(false);
177
+ const searchTriggerRef = useRef(null);
178
+ const items = itemsProp ?? internalItems;
179
+ const searchQuery = searchQueryProp ?? internalSearch;
180
+ const setSearchQuery = (value) => {
181
+ onSearchChange?.(value);
182
+ if (searchQueryProp === void 0) {
183
+ setInternalSearch(value);
184
+ }
185
+ };
186
+ const changeQty = onQtyChangeProp ?? ((id, delta) => setInternalItems(
187
+ (current) => current.flatMap((item) => {
188
+ if (item.id !== id) {
189
+ return item;
190
+ }
191
+ const qty = item.qty + delta;
192
+ return qty <= 0 ? [] : [{ ...item, qty }];
193
+ })
194
+ ));
195
+ const removeItem = onRemoveProp ?? ((id) => setInternalItems((current) => current.filter((item) => item.id !== id)));
196
+ const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items]);
197
+ useEffect(() => {
198
+ if (!showSearch || !searchOpen) {
199
+ return;
200
+ }
201
+ document.getElementById("store-search-mobile")?.focus();
202
+ }, [searchOpen, showSearch]);
203
+ const dismissSearch = () => {
204
+ setSearchOpen(false);
205
+ searchTriggerRef.current?.focus();
206
+ };
207
+ const navLinkColor = className !== void 0 ? "text-inherit hover:text-foreground" : "text-foreground";
208
+ const isCurrent = (href) => href !== void 0 && href === currentPath;
209
+ const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0;
210
+ return /* @__PURE__ */ jsxs(
211
+ "header",
212
+ {
213
+ className: cn(
214
+ "border-border sticky top-0 z-40 w-full border-b backdrop-blur-md",
215
+ className ?? "bg-background/95 supports-backdrop-filter:bg-background/80"
216
+ ),
217
+ children: [
218
+ hasUtilityContent ? /* @__PURE__ */ jsx("div", { className: "bg-foreground text-background hidden lg:block", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8", children: [
219
+ /* @__PURE__ */ jsx("p", { className: "text-background/80", children: shippingNote }),
220
+ /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-5", children: utilityLinks.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
221
+ "a",
222
+ {
223
+ href: link.href,
224
+ className: "text-background/80 hover:text-background transition-colors duration-150",
225
+ children: link.label
226
+ }
227
+ ) }, `${link.href}:${link.label}`)) })
228
+ ] }) }) : null,
229
+ /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8", children: [
230
+ /* @__PURE__ */ jsx(
231
+ Button,
232
+ {
233
+ variant: "ghost",
234
+ size: "icon",
235
+ className: "lg:hidden",
236
+ "aria-label": "Open menu",
237
+ "aria-expanded": menuOpen,
238
+ onClick: () => setMenuOpen((open) => !open),
239
+ children: /* @__PURE__ */ jsx(Menu, {})
240
+ }
241
+ ),
242
+ /* @__PURE__ */ jsx(
243
+ MobileCategoryDrawer,
244
+ {
245
+ categories: uniqueById([
246
+ ...storeCategories.map(toMenuItem),
247
+ ...utilityLinks.map((link) => ({ id: link.href, label: link.label, href: link.href })),
248
+ ...accountHref ? [{ id: accountHref, label: "Account", href: accountHref }] : []
249
+ ]),
250
+ collections: [],
251
+ open: menuOpen,
252
+ onClose: () => setMenuOpen(false),
253
+ viewAllHref: ""
254
+ }
255
+ ),
256
+ /* @__PURE__ */ jsx("div", { className: "flex-1 lg:flex-none", children: /* @__PURE__ */ jsx(Logo, { text: logoText, href: logoHref, accent: logoAccent }) }),
257
+ /* @__PURE__ */ jsx("nav", { "aria-label": "Store", className: "hidden flex-1 lg:block", children: /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-0.5", children: storeCategories.map(
258
+ (category) => category.children && category.children.length > 0 ? /* @__PURE__ */ jsxs("li", { className: "group relative", children: [
259
+ /* @__PURE__ */ jsx(
260
+ "a",
261
+ {
262
+ href: category.href,
263
+ "aria-current": isCurrent(category.href) ? "page" : void 0,
264
+ className: cn(
265
+ "hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
266
+ category.emphasis ? "text-destructive" : navLinkColor,
267
+ isCurrent(category.href) && "font-semibold underline underline-offset-4"
268
+ ),
269
+ children: category.label
270
+ }
271
+ ),
272
+ /* @__PURE__ */ jsx("div", { className: "invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100", children: /* @__PURE__ */ jsx(
273
+ MegaMenu,
274
+ {
275
+ categories: [toMenuItem(category)],
276
+ collections: [],
277
+ collectionsHref: "",
278
+ categoryColumnTitle: category.label
279
+ }
280
+ ) })
281
+ ] }, category.href) : /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
282
+ "a",
283
+ {
284
+ href: category.href,
285
+ "aria-current": isCurrent(category.href) ? "page" : void 0,
286
+ className: cn(
287
+ "hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none",
288
+ category.emphasis ? "text-destructive" : navLinkColor,
289
+ isCurrent(category.href) && "font-semibold underline underline-offset-4"
290
+ ),
291
+ children: category.label
292
+ }
293
+ ) }, category.href)
294
+ ) }) }),
295
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
296
+ showSearch ? /* @__PURE__ */ jsxs(Fragment, { children: [
297
+ /* @__PURE__ */ jsx("div", { className: "hidden lg:block lg:w-64", children: /* @__PURE__ */ jsx(
298
+ StorefrontNavbarSearchBar,
299
+ {
300
+ id: "store-search",
301
+ value: searchQuery,
302
+ onValueChange: setSearchQuery
303
+ }
304
+ ) }),
305
+ /* @__PURE__ */ jsx(
306
+ Button,
307
+ {
308
+ ref: searchTriggerRef,
309
+ variant: "ghost",
310
+ size: "icon",
311
+ className: "lg:hidden",
312
+ "aria-label": "Search products",
313
+ "aria-expanded": searchOpen,
314
+ onClick: () => setSearchOpen((open) => !open),
315
+ children: searchOpen ? /* @__PURE__ */ jsx(X, {}) : /* @__PURE__ */ jsx(Search, {})
316
+ }
317
+ )
318
+ ] }) : null,
319
+ accountUnavailable ? /* @__PURE__ */ jsx(StorefrontNavbarAccountRetry, { pending: accountPending, onRetry: onAccountRetry }) : user ? /* @__PURE__ */ jsx(
320
+ StorefrontNavbarAccountMenu,
321
+ {
322
+ user,
323
+ items: accountMenuItems,
324
+ onHelp,
325
+ onSignOut,
326
+ pending: accountPending
327
+ }
328
+ ) : accountHref ? accountPending ? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", disabled: true, "aria-label": "Loading account session", children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) : /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", className: "size-11", asChild: true, children: /* @__PURE__ */ jsx("a", { href: accountHref, "aria-label": "Account", "aria-current": isCurrent(accountHref) ? "page" : void 0, children: /* @__PURE__ */ jsx(UserRound, { "aria-hidden": "true" }) }) }) : null,
329
+ /* @__PURE__ */ jsxs(
330
+ Sheet,
331
+ {
332
+ ...cartOpen !== void 0 ? { open: cartOpen, onOpenChange: onCartOpenChange } : {},
333
+ children: [
334
+ /* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
335
+ Button,
336
+ {
337
+ variant: "ghost",
338
+ size: "icon",
339
+ className: "relative overflow-visible",
340
+ "aria-label": `Cart, ${count} ${count === 1 ? "item" : "items"}`,
341
+ children: [
342
+ /* @__PURE__ */ jsx(ShoppingBag, { className: "size-5" }),
343
+ /* @__PURE__ */ jsx(CartBadge, { count })
344
+ ]
345
+ }
346
+ ) }),
347
+ /* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "flex w-full max-w-sm flex-col gap-0 p-0", children: [
348
+ /* @__PURE__ */ jsx(SheetHeader, { className: "border-border border-b", children: /* @__PURE__ */ jsxs(SheetTitle, { className: "text-left text-base", children: [
349
+ "Cart",
350
+ count > 0 ? ` (${count})` : ""
351
+ ] }) }),
352
+ /* @__PURE__ */ jsx(
353
+ StorefrontNavbarCartSheet,
354
+ {
355
+ items,
356
+ onQtyChange: changeQty,
357
+ onRemove: removeItem,
358
+ subtotal,
359
+ subtotalUnavailableLabel,
360
+ formatMoney,
361
+ onCheckout,
362
+ onViewCart,
363
+ canonical: canonicalCart,
364
+ state: cartState,
365
+ errorLabel: cartErrorLabel,
366
+ retryLabel: cartRetryLabel,
367
+ onRetry: onCartRetry,
368
+ checkoutUnavailable,
369
+ checkoutDisabled,
370
+ viewCartUnavailable
371
+ }
372
+ )
373
+ ] })
374
+ ]
375
+ }
376
+ )
377
+ ] })
378
+ ] }),
379
+ /* @__PURE__ */ jsx("p", { "aria-live": "polite", className: "sr-only", children: `Cart contains ${count} ${count === 1 ? "item" : "items"}` }),
380
+ showSearch && searchOpen ? /* @__PURE__ */ jsx("div", { className: "border-border flex flex-col gap-0 border-t p-4 lg:hidden", children: /* @__PURE__ */ jsx(
381
+ StorefrontNavbarSearchBar,
382
+ {
383
+ id: "store-search-mobile",
384
+ value: searchQuery,
385
+ onValueChange: setSearchQuery,
386
+ onDismiss: dismissSearch
387
+ }
388
+ ) }) : null
389
+ ]
390
+ }
391
+ );
392
+ }
393
+ var storefront_navbar_default = StorefrontNavbar;
394
+ export {
395
+ StorefrontNavbar,
396
+ StorefrontNavbarAccountRetry,
397
+ storefront_navbar_default as default
398
+ };
399
+ //# sourceMappingURL=storefront-navbar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/blocks/e-commerce/navigation/storefront-navbar.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { Menu, Search, ShoppingBag, UserRound, RotateCcw, X } from 'lucide-react'\n\nimport { Button } from '../../../ui/button'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../../../ui/sheet'\nimport { cn } from '../../../lib/utils'\n\nimport { StorefrontNavbarAccountMenu, type AccountMenuItem, type StoreUser } from './storefront-navbar-account-menu'\nimport { StorefrontNavbarCartSheet, type CartItem, type CartSheetState } from './storefront-navbar-cart-sheet'\nimport type { UtilityLink } from './storefront-navbar-mobile-nav'\nimport { StorefrontNavbarSearchBar } from './storefront-navbar-search-bar'\nimport { MegaMenu } from './mega-menu'\nimport { MobileCategoryDrawer } from './mobile-category-drawer'\nimport type { MenuItem } from '../../../lib/types/menu'\nimport type { Money } from '@thorprovider/types'\nimport type { StoreCategory } from '../../../lib/contracts'\n\nfunction toMenuItem(category: StoreCategory): MenuItem {\n return {\n id: category.href,\n label: category.label,\n href: category.href,\n children: category.children?.map(toMenuItem),\n }\n}\n\n/**\n * Drawer entries come from three sources (categories, utility links, account\n * link). Hosts may reuse the same href across sources (e.g. a placeholder\n * href), which would produce duplicate React keys if passed through as-is.\n * Dedupe by href so every rendered item gets a unique id.\n */\nfunction uniqueById<T extends { id: string }>(items: T[]): T[] {\n const seen = new Set<string>()\n return items.filter((item) => {\n if (seen.has(item.id)) return false\n seen.add(item.id)\n return true\n })\n}\n\nexport interface LogoAccent {\n /** Trailing segment of `logoText` to render with the accent styling. */\n text: string\n /** Consumer-supplied classes for the accent span (e.g. a brand color token). */\n className?: string\n}\n\nfunction Logo({ text, href, accent }: { text: string; href?: string; accent?: LogoAccent }) {\n const className =\n 'focus-visible:ring-ring flex items-center gap-2 rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n\n const accentText = accent?.text ?? ''\n const hasAccent = accentText.length > 0 && text.endsWith(accentText)\n const baseText = hasAccent ? text.slice(0, text.length - accentText.length) : text\n\n const content = (\n <>\n <svg viewBox='0 0 32 32' aria-hidden='true' className='text-primary size-7' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M26 24.75C26.4142 24.75 26.75 24.4142 26.75 24C26.75 23.5858 26.4142 23.25 26 23.25V24.75ZM26 23.25H11V24.75H26V23.25ZM8.75 21V15H7.25V21H8.75ZM11 23.25C9.75736 23.25 8.75 22.2426 8.75 21H7.25C7.25 23.0711 8.92893 24.75 11 24.75V23.25Z'\n fill='currentColor'\n />\n <path\n d='M1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4C0.75 4.41421 1.08579 4.75 1.5 4.75V3.25ZM1.5 4.75H6V3.25H1.5V4.75ZM7.25 6V21H8.75V6H7.25ZM6 4.75C6.69036 4.75 7.25 5.30964 7.25 6H8.75C8.75 4.48122 7.51878 3.25 6 3.25V4.75Z'\n fill='currentColor'\n />\n <path\n d='M22 21.75C22.4142 21.75 22.75 21.4142 22.75 21C22.75 20.5858 22.4142 20.25 22 20.25V21.75ZM22 20.25H11V21.75H22V20.25ZM8.75 18V12H7.25V18H8.75ZM11 20.25C9.75736 20.25 8.75 19.2426 8.75 18H7.25C7.25 20.0711 8.92893 21.75 11 21.75V20.25Z'\n fill='currentColor'\n />\n <path\n d='M27.2057 19.754C27.0654 20.1438 26.6357 20.346 26.246 20.2057C25.8562 20.0654 25.654 19.6357 25.7943 19.246L27.2057 19.754ZM30.0361 9.67744L29.3305 9.4234L29.3305 9.4234L30.0361 9.67744ZM25.7943 19.246L29.3305 9.4234L30.7418 9.93148L27.2057 19.754L25.7943 19.246ZM28.1543 7.75L8 7.75V6.25L28.1543 6.25V7.75ZM29.3305 9.4234C29.6237 8.60882 29.0201 7.75 28.1543 7.75V6.25C30.059 6.25 31.3869 8.13941 30.7418 9.93148L29.3305 9.4234Z'\n fill='currentColor'\n />\n <path\n d='M13.5 21.75C13.0858 21.75 12.75 21.4142 12.75 21C12.75 20.5858 13.0858 20.25 13.5 20.25V21.75ZM26.7111 19.009L27.4174 19.2613L27.4174 19.2613L26.7111 19.009ZM13.5 20.25H23.8858V21.75H13.5V20.25ZM26.0048 18.7568L27.7937 13.7477L29.2063 14.2523L27.4174 19.2613L26.0048 18.7568ZM23.8858 20.25C24.8367 20.25 25.6849 19.6522 26.0048 18.7568L27.4174 19.2613C26.8843 20.7537 25.4706 21.75 23.8858 21.75V20.25Z'\n fill='currentColor'\n />\n <path d='M21.1694 10.5806L14.5651 17.1849' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <path d='M22.1694 14.5806L18.5632 18.1868' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n <circle cx='13.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n <circle cx='22.1' cy='26.1' r='1.7' stroke='currentColor' strokeWidth='1.2' />\n </svg>\n <span className='text-base font-semibold tracking-tight'>\n {baseText}\n {hasAccent ? <span className={accent?.className}>{accentText}</span> : null}\n </span>\n </>\n )\n\n if (!href) {\n return <span className={className}>{content}</span>\n }\n\n return (\n <a href={href} className={className}>\n {content}\n </a>\n )\n}\n\ntype CartBadgeProps = {\n count: number\n}\n\n/**\n * Transitions.dev `notification-badge`: diagonal slide + spring pop when the\n * count appears or changes. Positioned outside the bag so it never covers the icon.\n */\nfunction CartBadge({ count }: CartBadgeProps) {\n const reduceMotion = useReducedMotion()\n\n return (\n <AnimatePresence>\n {count > 0 ? (\n <motion.span\n key='badge-shell'\n className='bg-foreground text-background pointer-events-none absolute -top-2.5 -end-3.5 flex size-[1.125rem] items-center justify-center overflow-hidden rounded-full text-[10px] font-medium tabular-nums shadow-sm ring-2 ring-background'\n initial={\n reduceMotion\n ? false\n : { scale: 0, x: -8.2, y: 12.4, opacity: 0, filter: 'blur(2px)' }\n }\n animate={{ scale: 1, x: 0, y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : {\n scale: 0,\n opacity: 0,\n filter: 'blur(2px)',\n transition: { duration: 0.18, ease: [0.4, 0, 0.2, 1] },\n }\n }\n transition={\n reduceMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 520, damping: 18, mass: 0.6 }\n }\n style={{ willChange: 'transform, opacity, filter' }}\n >\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={count}\n className='block'\n initial={reduceMotion ? false : { y: 8, opacity: 0, filter: 'blur(2px)' }}\n animate={{ y: 0, opacity: 1, filter: 'blur(0px)' }}\n exit={reduceMotion ? undefined : { y: -8, opacity: 0, filter: 'blur(2px)' }}\n transition={{ duration: 0.22, ease: [0.22, 1, 0.36, 1] }}\n >\n {count > 99 ? '99+' : count}\n </motion.span>\n </AnimatePresence>\n </motion.span>\n ) : null}\n </AnimatePresence>\n )\n}\n\nexport interface StorefrontNavbarAccountRetryProps {\n /** Consumer-owned reconciliation in flight; holds the affordance inert. */\n pending?: boolean\n /** Consumer-owned recovery action. Without it the affordance is inert. */\n onRetry?: () => void\n}\n\n/**\n * Recovery affordance for an unavailable session. The block never resolves the\n * session itself: it surfaces the state and dispatches the consumer's retry.\n * Extracted (hooks-free) so the dispatch is testable without a DOM.\n */\nexport function StorefrontNavbarAccountRetry({ pending = false, onRetry }: StorefrontNavbarAccountRetryProps) {\n return (\n <Button\n variant='ghost'\n size='icon'\n className='size-11'\n disabled={pending || !onRetry}\n aria-label='Retry account session'\n title='Account session unavailable'\n onClick={onRetry}\n >\n <RotateCcw aria-hidden='true' />\n </Button>\n )\n}\n\nexport interface StorefrontNavbarProps {\n storeCategories: StoreCategory[]\n /**\n * Optional note shown in the desktop utility strip. When omitted (or empty)\n * and there are no `utilityLinks`, the strip is not rendered at all, so a\n * block with no optional content paints no empty decorative chrome.\n */\n shippingNote?: string\n utilityLinks: UtilityLink[]\n logoText: string\n logoHref?: string\n /**\n * Optional accent for a trailing segment of `logoText` (e.g. the \"Cuba\" in\n * \"ElectroCuba\"). When omitted, or when `text` is not a trailing segment of\n * `logoText`, the wordmark renders unchanged.\n */\n logoAccent?: LogoAccent\n /** Account destination for anonymous shoppers on every viewport. */\n accountHref?: string\n /**\n * When `false`, no search control is rendered at all — neither the desktop\n * input, the mobile trigger, nor the mobile panel. Defaults to `true` so\n * legacy consumers keep the existing self-contained search. The generated\n * storefront passes `false` while no verified global search contract exists\n * (E2 task 5.4), so no global search is presented as working.\n */\n /**\n * The storefront's current route path. When it matches a destination the link\n * is marked as the current page (accessibly, beyond color alone).\n */\n currentPath?: string\n showSearch?: boolean\n searchQuery?: string\n onSearchChange?: (value: string) => void\n items?: CartItem[]\n /**\n * Quantity DELTA for a backend cart line-item id. The boundary converts the\n * delta into an absolute quantity against the authoritative current line\n * quantity before mutating the cart.\n */\n onQtyChange?: (id: string, delta: number) => void\n /** Remove the backend cart line-item id. */\n onRemove?: (id: string) => void\n /** Authoritative backend subtotal for the mini-cart. */\n subtotal?: Money\n /** Shown when an authoritative subtotal is supplied but absent/malformed. */\n subtotalUnavailableLabel?: string\n /** Override money formatting (locale, currency). Defaults to `Money.currencyCode`. */\n formatMoney?: (money: Money) => string\n user?: StoreUser\n accountMenuItems?: AccountMenuItem[]\n onHelp?: () => void\n onSignOut?: () => void\n accountPending?: boolean\n accountUnavailable?: boolean\n onAccountRetry?: () => void\n onCheckout?: () => void\n onViewCart?: () => void\n /**\n * Controlled visibility for the cart sheet. When provided, the sheet opens\n * and closes from this value and `onCartOpenChange` instead of internal\n * state, so a host can share one cart surface across the navbar trigger and\n * successful add-to-cart. Omit both to keep the legacy uncontrolled sheet.\n */\n cartOpen?: boolean\n /** Change handler paired with `cartOpen` for a controlled sheet. */\n onCartOpenChange?: (open: boolean) => void\n /**\n * Backend-authoritative cart rendering for the sheet. When `true`, line\n * amounts use each item's canonical `lineTotal` Money and never fall back to\n * numeric `price * qty`. Omit for the legacy numeric rendering.\n */\n canonicalCart?: boolean\n /** Cart read/mutation lifecycle for the sheet. */\n cartState?: CartSheetState\n /** Message shown when `cartState` is `error`. */\n cartErrorLabel?: string\n /** Recovery action label for the error state. */\n cartRetryLabel?: string\n /** Recovery action invoked from the error state. */\n onCartRetry?: () => void\n /** When `true`, the sheet's checkout action is suppressed (checkout not installed). */\n checkoutUnavailable?: boolean\n /** When `true`, the sheet's checkout action is disabled (cart not ready). */\n checkoutDisabled?: boolean\n /** When `true`, the sheet's review action is suppressed (cart view not installed). */\n viewCartUnavailable?: boolean\n /**\n * Consumer-supplied classes merged onto the outer `<header>` as the final\n * argument, so a semantic surface such as `bg-brand-nav\n * text-brand-nav-foreground` overrides the default `bg-background`. Purely\n * presentational: no layout, structure, or behavior changes.\n */\n className?: string\n}\n\nexport function StorefrontNavbar({\n storeCategories,\n shippingNote = '',\n utilityLinks,\n logoText,\n logoHref,\n logoAccent,\n accountHref,\n currentPath,\n showSearch = true,\n searchQuery: searchQueryProp,\n onSearchChange,\n items: itemsProp,\n onQtyChange: onQtyChangeProp,\n onRemove: onRemoveProp,\n subtotal,\n subtotalUnavailableLabel,\n formatMoney,\n user,\n accountMenuItems,\n onHelp,\n onSignOut,\n accountPending = false,\n accountUnavailable = false,\n onAccountRetry,\n onCheckout,\n onViewCart,\n cartOpen,\n onCartOpenChange,\n canonicalCart,\n cartState,\n cartErrorLabel,\n cartRetryLabel,\n onCartRetry,\n checkoutUnavailable,\n checkoutDisabled,\n viewCartUnavailable,\n className,\n}: StorefrontNavbarProps) {\n /**\n * Integration seam\n * ----------------\n * Pass cart + search from your storefront, or leave uncontrolled for a\n * self-contained demo. Controlled props win when provided.\n */\n const [internalItems, setInternalItems] = useState<CartItem[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [searchOpen, setSearchOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const searchTriggerRef = useRef<HTMLButtonElement>(null)\n\n const items = itemsProp ?? internalItems\n const searchQuery = searchQueryProp ?? internalSearch\n\n const setSearchQuery = (value: string) => {\n onSearchChange?.(value)\n if (searchQueryProp === undefined) {\n setInternalSearch(value)\n }\n }\n\n const changeQty =\n onQtyChangeProp ??\n ((id: string, delta: number) =>\n setInternalItems(current =>\n current.flatMap(item => {\n if (item.id !== id) {\n return item\n }\n\n const qty = item.qty + delta\n return qty <= 0 ? [] : [{ ...item, qty }]\n }),\n ))\n\n const removeItem =\n onRemoveProp ?? ((id: string) => setInternalItems(current => current.filter(item => item.id !== id)))\n\n const count = useMemo(() => items.reduce((total, item) => total + item.qty, 0), [items])\n\n useEffect(() => {\n if (!showSearch || !searchOpen) {\n return\n }\n\n document.getElementById('store-search-mobile')?.focus()\n }, [searchOpen, showSearch])\n\n const dismissSearch = () => {\n setSearchOpen(false)\n searchTriggerRef.current?.focus()\n }\n\n // When the consumer overrides the header surface via `className`, the nav\n // links inherit its text color and need an explicit hover foreground so\n // `hover:bg-muted` never paints white-on-light; otherwise they keep the\n // default foreground (and the default hover surface).\n const navLinkColor =\n className !== undefined ? 'text-inherit hover:text-foreground' : 'text-foreground'\n // The current page is marked beyond color: an accessible current state plus a\n // visible weight/underline, and nothing when no destination matches.\n const isCurrent = (href?: string) => href !== undefined && href === currentPath\n\n // The desktop utility strip is decorative chrome: it is painted only when it\n // has content (a non-empty note or at least one utility link), never empty.\n const hasUtilityContent = shippingNote.trim().length > 0 || utilityLinks.length > 0\n\n return (\n <header\n className={cn(\n 'border-border sticky top-0 z-40 w-full border-b backdrop-blur-md',\n className ?? 'bg-background/95 supports-backdrop-filter:bg-background/80',\n )}\n >\n {hasUtilityContent ? (\n <div className='bg-foreground text-background hidden lg:block'>\n <div className='mx-auto flex h-9 w-full max-w-7xl items-center justify-between px-4 text-xs tracking-wide sm:px-6 lg:px-8'>\n <p className='text-background/80'>{shippingNote}</p>\n <ul className='flex items-center gap-5'>\n {utilityLinks.map(link => (\n <li key={`${link.href}:${link.label}`}>\n <a\n href={link.href}\n className='text-background/80 hover:text-background transition-colors duration-150'\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n ) : null}\n\n <div className='mx-auto flex h-16 w-full max-w-7xl items-center gap-3 px-4 sm:px-6 lg:px-8'>\n <Button\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Open menu'\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(open => !open)}\n >\n <Menu />\n </Button>\n\n <MobileCategoryDrawer\n categories={uniqueById([\n ...storeCategories.map(toMenuItem),\n ...utilityLinks.map(link => ({ id: link.href, label: link.label, href: link.href })),\n ...(accountHref ? [{ id: accountHref, label: 'Account', href: accountHref }] : []),\n ])}\n collections={[]}\n open={menuOpen}\n onClose={() => setMenuOpen(false)}\n viewAllHref=''\n />\n\n <div className='flex-1 lg:flex-none'>\n <Logo text={logoText} href={logoHref} accent={logoAccent} />\n </div>\n\n <nav aria-label='Store' className='hidden flex-1 lg:block'>\n <ul className='flex items-center gap-0.5'>\n {storeCategories.map(category =>\n category.children && category.children.length > 0 ? (\n <li key={category.href} className='group relative'>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n <div className='invisible absolute left-0 top-full z-50 pt-2 opacity-0 transition-opacity duration-150 group-hover:visible group-hover:opacity-100'>\n <MegaMenu\n categories={[toMenuItem(category)]}\n collections={[]}\n collectionsHref=''\n categoryColumnTitle={category.label}\n />\n </div>\n </li>\n ) : (\n <li key={category.href}>\n <a\n href={category.href}\n aria-current={isCurrent(category.href) ? 'page' : undefined}\n className={cn(\n 'hover:bg-muted focus-visible:ring-ring rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 focus-visible:ring-2 focus-visible:outline-none',\n category.emphasis ? 'text-destructive' : navLinkColor,\n isCurrent(category.href) && 'font-semibold underline underline-offset-4',\n )}\n >\n {category.label}\n </a>\n </li>\n ),\n )}\n </ul>\n </nav>\n\n <div className='flex items-center gap-1.5'>\n {showSearch ? (\n <>\n <div className='hidden lg:block lg:w-64'>\n <StorefrontNavbarSearchBar\n id='store-search'\n value={searchQuery}\n onValueChange={setSearchQuery}\n />\n </div>\n\n <Button\n ref={searchTriggerRef}\n variant='ghost'\n size='icon'\n className='lg:hidden'\n aria-label='Search products'\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen(open => !open)}\n >\n {searchOpen ? <X /> : <Search />}\n </Button>\n </>\n ) : null}\n\n {accountUnavailable ? (\n <StorefrontNavbarAccountRetry pending={accountPending} onRetry={onAccountRetry} />\n ) : user ? (\n <StorefrontNavbarAccountMenu\n user={user}\n items={accountMenuItems}\n onHelp={onHelp}\n onSignOut={onSignOut}\n pending={accountPending}\n />\n ) : accountHref ? (\n accountPending ? (\n <Button variant='ghost' size='icon' className='size-11' disabled aria-label='Loading account session'>\n <UserRound aria-hidden='true' />\n </Button>\n ) : (\n <Button variant='ghost' size='icon' className='size-11' asChild>\n <a href={accountHref} aria-label='Account' aria-current={isCurrent(accountHref) ? 'page' : undefined}>\n <UserRound aria-hidden='true' />\n </a>\n </Button>\n )\n ) : null}\n\n <Sheet\n {...(cartOpen !== undefined ? { open: cartOpen, onOpenChange: onCartOpenChange } : {})}\n >\n <SheetTrigger asChild>\n <Button\n variant='ghost'\n size='icon'\n className='relative overflow-visible'\n aria-label={`Cart, ${count} ${count === 1 ? 'item' : 'items'}`}\n >\n <ShoppingBag className='size-5' />\n <CartBadge count={count} />\n </Button>\n </SheetTrigger>\n <SheetContent side='right' className='flex w-full max-w-sm flex-col gap-0 p-0'>\n <SheetHeader className='border-border border-b'>\n <SheetTitle className='text-left text-base'>\n Cart{count > 0 ? ` (${count})` : ''}\n </SheetTitle>\n </SheetHeader>\n <StorefrontNavbarCartSheet\n items={items}\n onQtyChange={changeQty}\n onRemove={removeItem}\n subtotal={subtotal}\n subtotalUnavailableLabel={subtotalUnavailableLabel}\n formatMoney={formatMoney}\n onCheckout={onCheckout}\n onViewCart={onViewCart}\n canonical={canonicalCart}\n state={cartState}\n errorLabel={cartErrorLabel}\n retryLabel={cartRetryLabel}\n onRetry={onCartRetry}\n checkoutUnavailable={checkoutUnavailable}\n checkoutDisabled={checkoutDisabled}\n viewCartUnavailable={viewCartUnavailable}\n />\n </SheetContent>\n </Sheet>\n </div>\n </div>\n\n <p aria-live='polite' className='sr-only'>\n {`Cart contains ${count} ${count === 1 ? 'item' : 'items'}`}\n </p>\n\n {showSearch && searchOpen ? (\n <div className='border-border flex flex-col gap-0 border-t p-4 lg:hidden'>\n <StorefrontNavbarSearchBar\n id='store-search-mobile'\n value={searchQuery}\n onValueChange={setSearchQuery}\n onDismiss={dismissSearch}\n />\n </div>\n ) : null}\n </header>\n )\n}\n\nexport default StorefrontNavbar\n"],"mappings":"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","names":[]}
@@ -0,0 +1,74 @@
1
+ import type { Money } from '@thorprovider/types';
2
+ import { type OrderLineData } from './order-line';
3
+ export type OrderHistoryPresentation = 'cards' | 'rows';
4
+ /** Semantic badge tone. The host owns the mapping from its status model. */
5
+ export type OrderHistoryStatusTone = 'default' | 'secondary' | 'destructive' | 'outline';
6
+ /** Order status as data: the label is rendered and the tone styles it. */
7
+ export interface OrderHistoryStatus {
8
+ label: string;
9
+ tone?: OrderHistoryStatusTone;
10
+ }
11
+ /**
12
+ * Canonical order-history row: one order of the collection.
13
+ *
14
+ * `id` is the backend order identity — the React key and the value reported to
15
+ * `onViewOrder`/`onTrackOrder`. `total` is the backend order total and is
16
+ * rendered verbatim: the collection never sums its lines.
17
+ */
18
+ export interface OrderHistoryOrder {
19
+ /** Backend order identity. Used as the React key; never rendered. */
20
+ id: string;
21
+ /** Human-readable order number, rendered through `orderLabel`. */
22
+ number: string;
23
+ /** Placement date, already formatted by the host. */
24
+ date: string;
25
+ status: OrderHistoryStatus;
26
+ /** Backend order total. Rendered verbatim; a malformed amount is unavailable. */
27
+ total: Money;
28
+ items: OrderLineData[];
29
+ /** When true (and `onTrackOrder` is supplied) the tracking action renders. */
30
+ trackable?: boolean;
31
+ }
32
+ /** Every user-facing string the collection renders. All are overridable. */
33
+ export interface OrderHistoryLabels {
34
+ title: string;
35
+ description: string;
36
+ orderLabel: string;
37
+ placedOnLabel: string;
38
+ quantityLabel: string;
39
+ totalLabel: string;
40
+ viewOrderLabel: string;
41
+ trackOrderLabel: string;
42
+ amountUnavailableLabel: string;
43
+ emptyLabel: string;
44
+ }
45
+ export interface OrderHistoryProps {
46
+ orders: OrderHistoryOrder[];
47
+ /**
48
+ * Bounded structure switch. `cards` (default) renders one card per order;
49
+ * `rows` renders one bordered row per order. Both accept the same data and
50
+ * report the same actions. Responsiveness is CSS only.
51
+ */
52
+ presentation?: OrderHistoryPresentation;
53
+ labels?: Partial<OrderHistoryLabels>;
54
+ /** Locale used to format amounts from their own currency code. */
55
+ locale?: string;
56
+ /** Host amount formatter; wins over `locale`. */
57
+ formatMoney?: (money: Money) => string;
58
+ /** Report the backend order id of the order whose detail should open. */
59
+ onViewOrder?: (id: string) => void;
60
+ /** Report the backend order id of the order to track. */
61
+ onTrackOrder?: (id: string) => void;
62
+ className?: string;
63
+ }
64
+ /**
65
+ * The canonical order-history collection section.
66
+ *
67
+ * It renders exactly the orders it is given: pagination, ordering, detail,
68
+ * loading/error states, and the money values all belong to the host. The block
69
+ * holds no selection state, never counts the collection, never compares a
70
+ * status label to a literal, and never measures the viewport.
71
+ */
72
+ export declare function OrderHistory({ orders, presentation, labels, locale, formatMoney: formatMoneyProp, onViewOrder, onTrackOrder, className, }: OrderHistoryProps): import("react").JSX.Element;
73
+ export default OrderHistory;
74
+ //# sourceMappingURL=order-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-history.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/order-history/order-history.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAA;AAEvD,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAA;AAExF,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAA;IACV,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,kBAAkB,CAAA;IAC1B,iFAAiF;IACjF,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAA;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;IACtC,yEAAyE;IACzE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAoBD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,YAAsB,EACtB,MAAM,EACN,MAAM,EACN,WAAW,EAAE,eAAe,EAC5B,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAgJnB;AAED,eAAe,YAAY,CAAA"}